1

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

任何人都可以对这个问题有所了解吗?

4

1 回答 1

3

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 原生支持许多现代文件系统功能:

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

限制:

  • 有限的分区大小。对于 512 个扇区大小,32 位块号将分区大小限制为 2TB。
  • 不支持压缩/加密文件和目录。
于 2013-11-13T16:42:04.577 回答