尝试使用 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_EX
、IOCTL_DISK_GET_DRIVE_LAYOUT_EX
、IOCTL_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/