【发布时间】:2011-03-13 16:57:39
【问题描述】:
我正在开发一个需要将文件提取到磁盘的安装程序项目。如何使用 c# 计算/查找硬盘上的可用磁盘空间?
【问题讨论】:
-
您无法使用 C# 计算磁盘空间。您必须使用 .NET。
我正在开发一个需要将文件提取到磁盘的安装程序项目。如何使用 c# 计算/查找硬盘上的可用磁盘空间?
【问题讨论】:
你需要关心吗?只需将文件写入磁盘并根据需要处理错误 - 假设您无论如何都必须实施回滚以防发生与空间无关的事情,因此只需将“无磁盘空间”视为您需要的另一个错误回滚。
更新:如果您来这里是为了对这个正确答案投反对票,请留言说明原因。
【讨论】:
使用System.IO.DriveInfo 类。有两个选项可用...一个考虑磁盘配额:
var drive = new DriveInfo("c");
long freeSpaceInBytes = drive.AvailableFreeSpace;
一个简单地提供总可用空间的:
var drive = new DriveInfo("c");
long freeSpaceInBytes = drive.TotalFreeSpace;
【讨论】:
http://msdn.microsoft.com/en-us/library/system.io.driveinfo.totalfreespace.aspx
从链接复制
using System;
using System.IO;
class Test
{
public static void Main()
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
Console.WriteLine("Drive {0}", d.Name);
Console.WriteLine(" File type: {0}", d.DriveType);
if (d.IsReady == true)
{
Console.WriteLine(" Volume label: {0}", d.VolumeLabel);
Console.WriteLine(" File system: {0}", d.DriveFormat);
Console.WriteLine(
" Available space to current user:{0, 15} bytes",
d.AvailableFreeSpace);
Console.WriteLine(
" Total available space: {0, 15} bytes",
d.TotalFreeSpace);
Console.WriteLine(
" Total size of drive: {0, 15} bytes ",
d.TotalSize);
}
}
}
}
【讨论】:
您也可以使用 WMI。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx
using System;
using System.Management;
class Test
{
static void Main()
{
var moCollection = new ManagementClass("Win32_LogicalDisk").GetInstances();
foreach (var mo in moCollection)
{
if (mo["DeviceID"] != null && mo["DriveType"] != null && mo["Size"] != null && mo["FreeSpace"] != null)
{
// DriveType 3 = "Local Disk"
if (Convert.ToInt32(mo["DriveType"]) == 3)
{
Console.WriteLine("Drive {0}", mo["DeviceID"]);
Console.WriteLine("Size {0} bytes", mo["Size"]);
Console.WriteLine("Free {0} bytes", mo["FreeSpace"]);
}
}
}
}
}
【讨论】: