获取Windows上给定路径的可用磁盘空间

时间:2013-01-22 18:07:35

标签: c# windows

  

可能重复:
  Programmatically determining space available from UNC Path

我正在尝试找到一个可以从C#调用的函数来检索该信息。 这是我到目前为止所尝试的:

String folder = "z:\myfolder"; // It works
folder = "\\mycomputer\myfolder"; // It doesn't work

System.IO.DriveInfo drive = new System.IO.DriveInfo(folder);
System.IO.DriveInfo a = new System.IO.DriveInfo(drive.Name);
long HDPercentageUsed = 100 - (100 * a.AvailableFreeSpace / a.TotalSize);

这样可以,但只有我传递了一封驱动器号。有没有办法通过传递一条完整的路径来检索自由空间?

感谢。

1 个答案:

答案 0 :(得分:26)

尝试使用winapi函数GetDiskFreeSpaceEx

[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
   out ulong lpFreeBytesAvailable,
   out ulong lpTotalNumberOfBytes,
   out ulong lpTotalNumberOfFreeBytes);

ulong FreeBytesAvailable;
ulong TotalNumberOfBytes;
ulong TotalNumberOfFreeBytes;

bool success = GetDiskFreeSpaceEx(@"\\mycomputer\myfolder",
                                  out FreeBytesAvailable,
                                  out TotalNumberOfBytes,
                                  out TotalNumberOfFreeBytes);
if(!success)
    throw new System.ComponentModel.Win32Exception();

Console.WriteLine("Free Bytes Available:      {0,15:D}", FreeBytesAvailable);
Console.WriteLine("Total Number Of Bytes:     {0,15:D}", TotalNumberOfBytes);
Console.WriteLine("Total Number Of FreeBytes: {0,15:D}", TotalNumberOfFreeBytes);