代码之家  ›  专栏  ›  技术社区  ›  Matthew Whited

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

  •  4
  • Matthew Whited  · 技术社区  · 15 年前

    在.NET中,确保路径作为存储文件的容量的最佳方法是什么?我需要确保在下载之前我有足够的空间来存放文件,因为源代码不允许再次下载文件。我看过system.io.driveinfo,但它不适用于UNC路径。

    3 回复  |  直到 10 年前
        1
  •  5
  •   Noldorin    15 年前

    下面是一个简短的函数 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解决方案,则可以使用 GetDiskFreeSpaceEx 功能,如建议 this MSDN help page . 它似乎也支持本地和网络驱动器名。

    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解决方案,它是完全管理的(除了更少的行),但两者都应该做到这一点。

        2
  •  0
  •   stevehipwell    15 年前

    我相信你可以用wmi得到你需要的答案,这通常是一个好的开始。

        3
  •  0
  •   Guffa    15 年前

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

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