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

LEM*_*LEM 14 c# windows

可能重复:以
编程方式确定UNC路径中可用的空间

我正在尝试找到一个可以从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);
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

rek*_*ire 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);
Run Code Online (Sandbox Code Playgroud)

  • 有谁知道在没有API调用的情况下在纯Dot Net中执行此操作的方法?DriveInfo似乎仅适用于驱动器,而不适用于UNC路径。 (2认同)

归档时间:

查看次数:

22362 次

最近记录:

12 年,11 月 前