除了使用 System.IO.DriveInfo(Whidbey 方式)来获取磁盘信息外,还可以使用另外两种方法,这里作个简单的说明。
WMI 方式
使用 ManagementObject。
ManagementObject 的名称空间是:
System.Management
ManagementObject 的程序集是:
System.Management(在 System.Management.dll 中)
名称空间和程序集默认都是没有导入的。程序集可以在工程的属性中导入。
示例:
ManagementObject disk = new ManagementObject("Win32_LogicalDisk.deviceid=/"C:/""); ;
disk.Get();
long size = Convert.ToInt64(disk["Size"]);
long freeSpace = Convert.ToInt64(disk["FreeSpace"]);
disk.Get();
long size = Convert.ToInt64(disk["Size"]);
long freeSpace = Convert.ToInt64(disk["FreeSpace"]);
interop 方式
分三步。
第一步、导入名称空间:
using System.Runtime.InteropServices;
第二步、引入函数:
[DllImport("kernel32.dll")]
public static extern bool GetDiskFreeSpaceEx(
string lpDirectoryName,
out UInt64 lpFreeBytesAvailable,
out UInt64 lpTotalNumberOfBytes,
out UInt64 lpTotalNumberOfFreeBytes);
public static extern bool GetDiskFreeSpaceEx(
string lpDirectoryName,
out UInt64 lpFreeBytesAvailable,
out UInt64 lpTotalNumberOfBytes,
out UInt64 lpTotalNumberOfFreeBytes);
第三步、调用这个函数:
ulong freeBytesAvailable = 0;
ulong totalNumberOfBytes = 0;
ulong totalNumberOfFreeBytes = 0;
GetDiskFreeSpaceEx("c://",
out freeBytesAvailable,
out totalNumberOfBytes,
out totalNumberOfFreeBytes);
ulong totalNumberOfBytes = 0;
ulong totalNumberOfFreeBytes = 0;
GetDiskFreeSpaceEx("c://",
out freeBytesAvailable,
out totalNumberOfBytes,
out totalNumberOfFreeBytes);
相关阅读