我正在尝试使用以下代码确定CD的可用空间量:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_LogicalDisk WHERE DriveType =5");
foreach(ManagementObject mo in searcher.Get())
{
Console.WriteLine( "FreeSpace: "+mo["FreeSpace"].ToString());
Console.WriteLine("CapacitySpace: " + mo["Size"].ToString());
UInt64 usedspace = (UInt64)mo["Size"] - (UInt64)mo["FreeSpace"];
Console.WriteLine("UsedSpace: " + usedspace.ToString());
}
运行上面的代码,我收到以下输出:
FreeSpace:0
CapacitySpace:301463552
UsedSpace:301463552
理想情况下,我想报告Windows资源管理器统计信息--YYY YYY免费。请注意,Windows资源管理器报告392 MB免费702 MB。谢谢!
更新(09年4月1日): 看来确定CD可用空间的能力超出了WMI,并且依赖于插入的磁盘的文件系统。我的测试表明Windows不会显示格式化CDFS的CD的容量信息;但是,它将显示格式化为UDF的CD的容量信息。
此外,我找到了一个优秀的原生实用工具,用于浏览引用here的WMI。
答案 0 :(得分:0)
什么是ManagementObject的对象类型?因为如果mo [“Size”]只存储int32,那么对int64的强制转换不会做太多。
答案 1 :(得分:0)
您是否尝试确定CD的理论最大可用空间量?
我的理解是CD-ROM是一种只读格式,因此永远不会有任何空闲空间。每个位都用于已经写入的数据,不能再写入它,因此永远不会有可用的空间。
如果您只是想知道ROM上的未写入空间,只需从固定的理论最大值(702MB?)中减去已用空间,就可以得到它。固定的最大值应该是规范的一部分。
您是否考虑过在设备上使用mciSendString(),可能使用“info”或“status”字符串,以获取有关驱动器中光盘的更多信息?我自己没试过,所以我不确定它是否有用。