这就是我所拥有的:
public static bool DriveHasLessThanTenPercentFreeSpace(string server)
{
long driveSize = 0;
long freeSpace = 0;
var oConn = new ConnectionOptions {Username = "username", Password = Settings.Default.SQLServerAdminPassword};
var scope = new ManagementScope("\\\\" + server + "\\root\\CIMV2", oConn);
scope.Connect();
var query = new ObjectQuery("SELECT FreeSpace FROM Win32_LogicalDisk where DeviceID = 'D:'");
var searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
//the FreeSpace value is in bytes
freeSpace = Convert.ToInt64(m["FreeSpace"]);
//error happens here!
driveSize = Convert.ToInt64(m["Size"]);
}
long percentFree = ((freeSpace / driveSize) * 100);
if (percentFree < 10)
{
return true;
}
return false;
}
这行代码给了我一个错误:
driveSize = Convert.ToInt64(m["Size"]);
错误说:
ManagementException was unhandled by user code
未找到
我假设查询得到驱动器大小错误。
请注意,我在行中获得了freeSpace值:
freeSpace = Convert.ToInt64(m["FreeSpace"]);
所以我知道查询IS适用于freeSpace。
任何人都可以帮我一把吗?
答案 0 :(得分:2)
您的查询中需要SELECT * FROM Win32_LogicalDisk...
。
因为你正在选择&#34; FreeSpace&#34;在你的查询中,除了可用空间之外别无其他,其他一切都会引发异常。
如果您不想返回所有内容(因为它是一个远程查询),您有几个选项:
SELECT FreeSpace, Size FROM Win32_LogicalDisk...