如何在Windows中读取多会话DVD磁盘大小?

rke*_*erm 7 c++ winapi diskspace cddvd

尝试使用GetDiskFreeSpaceEx()读取在多个会话中创建的磁盘大小仅提供上一个会话的大小.如何正确读取C/C++中所有会话的数量和大小?

谢谢.

小智 3

您可能想查看DeviceIoControl API 函数。请参阅此处了解控制代码。下面是一个检索 CD 磁盘大小的代码示例。代替

CreateFile(TEXT("\\\\.\\PhysicalDrive0")
Run Code Online (Sandbox Code Playgroud)

例如

CreateFile(TEXT("\\\\.\\F:") /* Drive is F: */
Run Code Online (Sandbox Code Playgroud)

如果你希望。

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


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

以下是 IMAPI 的一些资源:
MSDN - IMAPI
MSDN - IMAPI 接口
MSDN - 使用 IMAPI 创建多会话磁盘(注意:使用 VB 的示例,而不是 C 或 C++)