如何确定CD-ROM的可用空间量?

时间:2009-03-31 21:08:31

标签: c# hardware wmi

我正在尝试使用以下代码确定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。

2 个答案:

答案 0 :(得分:0)

什么是ManagementObject的对象类型?因为如果mo [“Size”]只存储int32,那么对int64的强制转换不会做太多。

答案 1 :(得分:0)

您是否尝试确定CD的理论最大可用空间量?

我的理解是CD-ROM是一种只读格式,因此永远不会有任何空闲空间。每个位都用于已经写入的数据,不能再写入它,因此永远不会有可用的空间。

如果您只是想知道ROM上的未写入空间,只需从固定的理论最大值(702MB?)中减去已用空间,就可以得到它。固定的最大值应该是规范的一部分。


您是否考虑过在设备上使用mciSendString(),可能使用“info”或“status”字符串,以获取有关驱动器中光盘的更多信息?我自己没试过,所以我不确定它是否有用。