【问题标题】:Can IMAPI2 burn files with the size > 4Gb?IMAPI2 可以刻录大于 4Gb 的文件吗?
【发布时间】:2010-10-29 22:08:18
【问题描述】:

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

谁能解释一下这个问题?

【问题讨论】:

  • 如果你需要写比这个更大的文件,你总是可以先使用归档程序将它分成块。如果没有直接的解决方案,请绕行。
  • 我可以实现自己的 IStream 并使用 AddFile 而不是 AddTree。这是更好的解决方法。我想知道我真的需要这样做。

标签: windows imapi


【解决方案1】:

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。
  • 不支持压缩/加密文件和目录。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2012-01-21
    • 1970-01-01
    • 2010-09-11
    • 2015-10-06
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多