使用.Net检查文件系统容量的最佳方法是什么?

Mat*_*ted 4 .net filesystems

什么是.Net中确保路径作为存储文件容量的最佳方式.在下载之前我需要确保我有文件的空间,因为源不允许第二次下载文件.我查看了System.IO.DriveInfo,但这对UNC路径不起作用.

Nol*_*rin 5

这是一个从该页面获取的简短函数,显示如何使用WMI获取任何驱动器(本地或网络/ UNC)的可用空间.

private static ulong GetFreeDiskSpaceInBytes(string drive)
{
    ManagementObject disk =
        new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\"");
    disk.Get();
    return (ulong)disk["FreeSpace"];
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Win32 API解决方案,则可以GetDiskFreeSpaceEx按照此MSDN帮助页面的建议使用该功能.它似乎也支持本地和网络驱动器名称.

Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" _
    Alias "GetDiskFreeSpaceExA" (ByVal lpDirectoryName As String, _
    lpFreeBytesAvailableToCaller As Currency, _
    lpTotalNumberOfBytes As Currency, _
    lpTotalNumberOfFreeBytes As Currency) As Long

Private Sub Form_Click()
    Dim Status As Long
    Dim TotalBytes As Currency
    Dim FreeBytes As Currency
    Dim BytesAvailableToCaller As Currency

    Status = GetDiskFreeSpaceEx(Text1.Text, BytesAvailableToCaller, _
      TotalBytes, FreeBytes)
    If Status <> 0 Then
        MsgBox Format(TotalBytes * 10000, "#,##0"), , "Total Bytes"
        MsgBox Format(FreeBytes * 10000, "#,##0"), , "Free Bytes"
        MsgBox Format(BytesAvailableToCaller * 10000, "#,##0"), , _
          "Bytes Available To Caller"
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

如果您在将其转换为C#时遇到问题,请告诉我.

我不得不在这里推荐WMI解决方案,它是完全管理的(除了更少的线路),但要么应该做到这一点.