IMAPI2可以刻录大小为>的文件吗? 4GB?

时间:2009-05-29 15:29:07

标签: windows imapi

IMAPI2接口IFileSystem使用COM IStream接口来表示文件数据。 AddTree方法将指定的目录内容添加到IFileSystem。因此AddTree必须在此过程中创建IStream。我想知道它使用的是什么IStream实现?如果它使用标准的OLE实现比我们有一个讨厌的问题,因为OLE流不支持大于4Gb的文件。

有人能解释一下这个问题吗?

2 个答案:

答案 0 :(得分:2)

IMAPIv2将ISO9660兼容光盘上的文件大小限制为2GB。

要刻录超过2GB的文件,您必须设置UDF文件系统。

 HRESULT hr = FileSystemImage->put_FileSystemsToCreate( FsiFileSystemUDF );

FsiFileSystems枚举定义了已识别文件系统的值:

typedef enum FsiFileSystems { 
  FsiFileSystemNone     = 0,
  FsiFileSystemISO9660  = 1,
  FsiFileSystemJoliet   = 2,
  FsiFileSystemUDF      = 4,
  FsiFileSystemUnknown  = 0x40000000
} FsiFileSystems;
  
      
  • FsiFileSystemNone光盘不包含可识别的文件系统。
  •   
  • FsiFileSystemISO9660标准CD文件系统。
  •   
  • FsiFileSystemJoliet Joliet文件系统。
  •   
  • FsiFileSystemUDF UDF文件系统。
  •   
  • FsiFileSystemUnknown光盘似乎有文件系统,但布局与任何已识别的类型都不匹配。
  •   

UDF本身支持许多现代文件系统功能:

  • 大分区大小(最大2TB,512B块大小,或8TB,块大小为2KB)64位文件大小
  • 没有大小限制的扩展属性(例如,命名流或分叉)
  • 长文件名(最多254个字节,名称中可以出现任何字符)
  • 文件名的Unicode编码
  • 稀疏文件
  • 硬链接
  • 符号链接
  • 元数据校验和

限制:

  • 分区大小有限。对于512扇区大小,32位块编号将分区大小限制为2TB。
  • 不支持压缩/加密的文件和目录。

答案 1 :(得分:0)

显然AddTree使用SHCreateStreamOnFileEx,它显然支持大文件。我会在检查时接受我的回答。