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

C# 如何确定CD-ROM的可用空间量?,c#,hardware,wmi,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"].ToStr

我正在尝试使用以下代码确定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());
}
运行上述代码,我收到以下输出:

自由空间:0
容量空间:301463552
使用空间:301463552

理想情况下,我想报告Windows资源管理器统计数据-XXX of YYY free。请注意,Windows资源管理器报告的是392 MB的空闲空间,而不是702 MB的空闲空间。谢谢

更新(2009年4月1日): 确定CD可用空间的能力似乎超出了WMI,并且依赖于插入磁盘的文件系统。我的测试表明Windows不会显示CD格式CDF的容量信息;但是,它将显示CD格式UDF的容量信息


此外,我还找到了一个优秀的本机实用程序,用于浏览引用的WMI。

ManagementObject mo的对象类型是什么?因为如果mo[“Size”]仅存储int32,则转换为int64不会有多大作用。

您是否试图从CD的理论最大可用空间确定未使用的空间量

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

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



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

我是第一个承认我对WMI/ManagementObject世界知之甚少的人,但这不会对第一个控制台输出(FreeSpace)产生影响。这就是我试图做的;但是,UsedSpace报告为301463552字节(287.49MB),这相当于414MB(702-287=415)的空闲空间。资源管理器报告我有392MB的空闲空间。此外,您的方法对CD很有效,但DVD有不同的容量()。我还没有尝试过mciSendString(),但我接受了您之前的建议,使用了理论上的最大值,因为我知道插入的是哪种类型的光盘-这对我的口味来说有点困难,但在我有限的测试中它起到了作用。