C# .net DriveInfo.AviableFreespace поведение на LinuxC#

Место общения программистов C#
Ответить
Anonymous
 C# .net DriveInfo.AviableFreespace поведение на Linux

Сообщение Anonymous »

Мне интересно, является ли результат нового DriveInfo (). Доступный freeSpace надежен на Linux. Когда это не надежно (если существует резо, показывающая, что он не соответствует результату df , например), или есть альтернатива, которая согласована между Windows и Linux? class = "lang-cs prettyprint-override">

Код: Выделить всё

using System.Diagnostics;

string GetMountPoint(string path)
{
var lines = File.ReadAllLines("/proc/mounts");
string? bestMatch = null;

foreach (var line in lines)
{
var parts = line.Split(' ');
if (parts.Length < 2) continue;

var mountPoint = parts[1];
if (path.StartsWith(mountPoint) &&
(bestMatch == null || mountPoint.Length > bestMatch.Length))
{
bestMatch = mountPoint;
}
}

return bestMatch ?? "/";
}

string RunDfCommand(string path)
{
var psi = new ProcessStartInfo
{
FileName = "df",
Arguments = $"-B1 \"{path}\"",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};

using var process = Process.Start(psi)!;
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();

return output;
}

long ParseDfAvailableBytes(string dfOutput)
{
var lines = dfOutput.Split('\n', StringSplitOptions.RemoveEmptyEntries);
if (lines.Length < 2) return -1;

var columns = lines[1].Split(' ', StringSplitOptions.RemoveEmptyEntries);
if (columns.Length < 5) return -1;

return long.TryParse(columns[3], out long available) ? available : -1;
}

var path = "/mnt/sfroot/log";
var before = new DriveInfo(path).AvailableFreeSpace;
var after = new DriveInfo(GetMountPoint(path)).AvailableFreeSpace;
var dfOutput = ParseDfAvailableBytes(RunDfCommand(path));

Console.WriteLine($"current:\t{before}");
Console.WriteLine($"fixed:\t\t{after}");
Console.WriteLine($"df output:\t{dfOutput}");
Причина, по которой я задаю этот вопрос, заключается в том, что я работаю над большой кодовой базой, и иногда я вижу, что DF говорит и что DriveInfo.AvialableFreespace показывает, что не совпадает, но у меня нет конкретного доказательства

Подробнее здесь: https://stackoverflow.com/questions/797 ... r-on-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»