在.Net中,确保路径能够存储文件的最佳方法是什么?我需要确保在下载文件之前有足够的空间,因为源不允许文件被第二次下载。我已经查看了System.IO.DriveInfo,但这对于UNC路径不起作用。
在.Net中,确保路径能够存储文件的最佳方法是什么?我需要确保在下载文件之前有足够的空间,因为源不允许文件被第二次下载。我已经查看了System.IO.DriveInfo,但这对于UNC路径不起作用。
以下是从此页面摘取的一个简短的功能,它显示了如何使用WMI获取任何驱动器(本地或网络/UNC)的可用空间。
private static ulong GetFreeDiskSpaceInBytes(string drive)
{
ManagementObject disk =
new ManagementObject("win32_logicaldisk.deviceid=\"" + drive + ":\"");
disk.Get();
return (ulong)disk["FreeSpace"];
}
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
如果你在将它转换为C#时遇到问题,请告诉我。
我会推荐使用WMI解决方案,因为它是完全托管的(除了行数较少),但两者都可以完成任务。
我相信您可以使用WMI获取所需的答案,这通常是一个很好的起点。
唯一确定磁盘是否能存储文件的方法是在磁盘上实际创建该大小的文件。
即使磁盘信息显示有足够的空间,由于碎片整理,你很少能使用100%的可用磁盘空间。