首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.Net检查文件系统容量的最佳方法是什么?

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

Stack Overflow用户
提问于 2009-05-12 14:54:20
回答 3查看 353关注 0票数 4

在.Net中,确保路径作为存储文件的容量的最佳方法是什么?在下载之前,我需要确保我有足够的空间来存放文件,因为源代码不允许第二次下载该文件。我已经研究过System.IO.DriveInfo,但这不适用于UNC路径。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-12 14:57:48

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

代码语言:javascript
复制
private static ulong GetFreeDiskSpaceInBytes(string drive)
{
    ManagementObject disk =
        new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\"");
    disk.Get();
    return (ulong)disk["FreeSpace"];
}

如果您想要一个Win32应用编程接口解决方案,您可以按照this MSDN help page的建议使用GetDiskFreeSpaceEx函数。它似乎也支持本地和网络驱动器名称。

代码语言:javascript
复制
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解决方案,它是完全托管的(除了更少的行),但这两种方案中的任何一种都应该能做到这一点。

票数 5
EN

Stack Overflow用户

发布于 2009-05-12 14:58:04

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

票数 0
EN

Stack Overflow用户

发布于 2009-05-12 15:00:06

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/853202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档