c++ - 如何在 Windows 中读取多 session DVD 磁盘大小?

标签 c++ winapi diskspace cddvd

尝试使用 GetDiskFreeSpaceEx() 读取在多个 session 中创建的磁盘大小只给出最后一个 session 的大小。如何正确读取 C/C++ 中所有 session 的数量和大小?

谢谢。

最佳答案

您可能想查看 DeviceIoControl API函数。参见 here用于控制代码。 Here是检索 CD 磁盘大小的代码示例。替代

CreateFile(TEXT("\\\\.\\PhysicalDrive0")

例如

CreateFile(TEXT("\\\\.\\F:") /* Drive is F: */

如果你愿意。

注意:该页面说 DeviceIoControl 可用于“检索有关软盘驱动器、硬盘驱动器、磁带驱动器或 CD-ROM 驱动器的信息” , 但我也在 DVD 上测试过它,它似乎工作得很好。我无法访问任何多 session DVD 进行测试,因此您必须自己测试它是否有效。如果它不起作用,我会尝试一些其他控制代码,至少 IOCTL_DISK_GET_DRIVE_GEOMETRY_EXIOCTL_DISK_GET_DRIVE_LAYOUT_EXIOCTL_DISK_GET_LENGTH_INFO IOCTL_DISK_GET_PARTITION_INFO_EX


如果 DeviceIoControl 都失败了,您可以使用 Windows Image Mastering API (IMAPI)。您需要 API 的 v2(包含在 Vista 及更高版本中,也可以添加到 XP 和 2003 中,请参见此处:What's new in IMAPIv2)以获得 DVD 支持。这个 API 主要用于 CD 刻录,但可能包含一些用于检索磁盘大小的功能,如果没有,我会觉得很奇怪。特别是,this例子似乎很有趣。我也不知道这个是否适用于多 session 磁盘,但由于它可以创建它们,我想它很有可能。

以下是 IMAPI 的一些资源:
MSDN - IMAPI
MSDN - IMAPI interfaces
MSDN - Creating multisession disks with IMAPI (注意:使用 VB 的示例,而不是 C 或 C++)

关于c++ - 如何在 Windows 中读取多 session DVD 磁盘大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007620/

相关文章:

c++ - 在递归中使用一维数组

c++ - 异或和移位数组中的位

c++ - RegisterClassEx 在 64 位上参数无效(但在 32 位上工作)

javascript - 如何使用 JavaScript 估计字符串的磁盘大小?

c++ - sizeof 操作数得到评估?

java arraylist 有像 c++ vector capacity() 这样的函数还是机制不同?

macos - 如何修复OSX磁盘太满,我什至无法删除文件来腾出空间

ntfs - Windows 8中非零文件的"size on disk"为零吗?

找不到 SendInput() 函数使用的任何数据类型

c++ - 检查文件是否被进程文件句柄锁定