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

时间:2009-05-12 14:54:20

标签: .net filesystems

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

3 个答案:

答案 0 :(得分:5)

这是一个来自this page的简短函数,展示了如何使用WMI获取任何驱动器(本地或网络/ UNC)的可用空间。

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

如果您使用的是Win32 API解决方案,则可以使用this MSDN help page建议的GetDiskFreeSpaceEx功能。它似乎也支持本地和网络驱动器名称。

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

如果您在将其转换为C#时遇到问题,请与我们联系。

我必须在这里推荐WMI解决方案,它是完全管理的(除了更少的行),但是要么应该这样做。

答案 1 :(得分:0)

我确信您可以使用WMI获得所需的答案,这通常是一个很好的起点。

答案 2 :(得分:0)

查看磁盘是否可以存储文件的唯一可靠方法是在磁盘上实际创建该大小的文件。

即使磁盘信息说有足够的空间,由于碎片整理,您很少使用100%的可用磁盘空间。