在Linux上的C#中查找目录的可用空间

在Linux上的C#中查找目录的可用空间,c#,linux,mono,cross-platform,diskspace,C#,Linux,Mono,Cross Platform,Diskspace,我需要的代码既可以在VisualStudio和Mono下编译,也可以在Linux或Windows上运行 我需要返回可用空间,只给出目录的路径 在windows上,我会按照- var file = new FileInfo(path); var drive = new DriveInfo(file.Directory.Root.FullName); return drive.AvailableFreeSpace; 然而,在Linux上,这似乎引发了一个参数异常。file.Directory.R

我需要的代码既可以在VisualStudio和Mono下编译,也可以在Linux或Windows上运行

我需要返回可用空间,只给出目录的路径

在windows上,我会按照-

var file  = new FileInfo(path);
var drive = new DriveInfo(file.Directory.Root.FullName);
return drive.AvailableFreeSpace;
然而,在Linux上,这似乎引发了一个参数异常。file.Directory.Root.FullName返回“/”。DriveInfo引发“驱动器名不存在”的参数异常

有什么想法吗


谢谢

您可以简单地使用linux df命令。这将返回计算机上所有可用磁盘的摘要

public static class ServersManager
{      
        public static string GetDiskSpace()
        {
            return string.Join(" ", "df").Bash();
        }

        private static string Bash(this string cmd)
        {
            var escapedArgs = cmd.Replace("\"", "\\\"");

            var process = new Process()
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "/bin/bash",
                    Arguments = $"-c \"{escapedArgs}\"",
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                }
            };
            process.Start();
            string result = process.StandardOutput.ReadToEnd();
            process.WaitForExit();
            return result;
        }
}
函数GetDiskSpace返回以下形式的表:

文件系统| 1K块|已使用|可用|使用%|安装在


/dev/sda4 | 497240864 | 31182380 | 466058484 | 7%|/

您检查过这个吗?我已经读过了。我看不出它在这种情况下会有什么帮助?我认为“新解决方案”部分解释了如何以不同的方式启动应用程序,这实际上可能会解决问题。case:使所有文件系统访问不区分大小写;驱动器:从路径名中删除驱动器名。我不知道这两种方法如何解决这个问题——它所能做的就是从windows中删除驱动器号,可能也会破坏它。(我正在尝试查找驱动器名)