【问题标题】:How can I determine the amount of free space of a CD-ROM?如何确定 CD-ROM 的可用空间量?
【发布时间】:2009-03-31 21:08:30
【问题描述】:

我正在尝试使用以下代码确定一张 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 资源管理器的统计信息 - 免费的 YYY XXX。请注意,Windows 资源管理器报告的 392 MB 空闲 702 MB。谢谢!

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

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

【问题讨论】:

    标签: c# hardware wmi


    【解决方案1】:

    您是否尝试根据 CD 的理论最大可用空间量来确定未使用的空间量?

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

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


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

    【讨论】:

    • 这就是我想要做的;但是,UsedSpace 报告为 301463552 字节 (287.49MB),相当于 414MB (702-287=415) 可用空间。 Explorer 报告我有 392MB 可用空间。此外,您的方法适用于 CD,但 DVD 具有不同的容量 (tinyurl.com/c3y5ln)。
    • 我还没有尝试过 mciSendString(),但我接受了你之前的建议,使用了理论上的最大值,因为我知道插入的是什么类型的光盘 - 对我的口味来说有点笨拙,但它可以解决问题在我有限的测试中。
    【解决方案2】:

    ManagementObject mo 的对象类型是什么?因为如果 mo["Size"] 只存储 int32 则转换为 int64 不会做太多。

    【讨论】:

    • 我是第一个承认我对 WMI / ManagementObject 世界了解不多的人,但这不会对第一个控制台输出 (FreeSpace) 产生影响。
    猜你喜欢
    • 2017-02-19
    • 2023-03-31
    • 2015-06-23
    • 1970-01-01
    • 2013-01-11
    • 2012-07-04
    • 2015-07-05
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多