字符串:
"win32_logicaldisk.deviceid=\"pathroot"
仅包含一个转义的双引号。我不是专家,但我希望它是:
"win32_logicaldisk.deviceid=\"pathroot\""
但是,您实际上仍然没有将 pathroot 的值包含到生成的 WMI 查询中。为此,您可以使用以下内容:
var query = string.Format("win32_logicaldisk.deviceid=\"{0}\"", pathroot);
ManagementObject disk = new ManagementObject(query);
我还没有测试过,但我认为这不起作用,因为“deviceid”需要一个“C:”形式的字符串,而不是完整路径。从完整路径中获取驱动器号,如下所示:
var driveLetter = System.IO.Path.GetPathRoot(pathroot);
var query = string.Format("win32_logicaldisk.deviceid=\"{0}\"", pathroot);
ManagementObject disk = new ManagementObject(query);
但是请注意,当您需要能够为 UNC(网络共享)路径查询驱动器空间时,此方法不起作用。
最后,带有路径的硬编码字符串不会被转义。例如,现在,\Program Files 中的 \P 被视为转义序列,而不是文字 \P。用 @ 标记字符串,使其变为:
string pathroot = @"C:\Program Files (x86)\Personal\movies"