2009-05-29 18 views
0

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

任何人都可以解释一下这个问题?

+0

如果您需要编写大于该文件的文件,您可以使用归档程序首先将其拆分成块。如果没有直接的解决方案,请四处走走。 – 2009-05-29 15:37:24

回答

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编码文件名
  • 稀疏文件
  • 硬链接
  • 符号链接
  • 元数据校验

限制:

  • 有限公司分区大小。 32位块数将512分区大小的分区大小限制为2TB。
  • 不支持压缩/加密的文件和目录。
0

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

相关问题