Может ли IMAPI2 записывать файлы размером> 4 Гб? - PullRequest
0 голосов
/ 29 мая 2009

Интерфейс IMAPI2 IFileSystem использует интерфейсы COM IStream для представления данных файла. Существует метод AddTree, который добавляет указанное содержимое каталога в IFileSystem. Таким образом, AddTree должен создавать IStream в процессе. Интересно, какую реализацию IStream он использует? Если он использует стандартную реализацию OLE, то у нас возникает неприятная проблема, поскольку потоки OLE не поддерживают файлы размером более 4 ГБ.

Может кто-нибудь пролить свет на эту проблему?

Ответы [ 2 ]

2 голосов
/ 13 ноября 2013

IMAPIv2 ограничивает размер файла на диске, совместимом с ISO9660, до 2 ГБ.

Для записи файлов размером более 2 ГБ необходимо установить файловую систему 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 изначально поддерживает многие функции современных файловых систем:

  • Большой размер раздела (максимум 2 ТБ с размером блока 512 Б или 8 ТБ с размером блока 2 КБ) Размер файла 64-разрядный
  • Расширенные атрибуты (например, именованные потоки или вилки) без ограничения размера
  • Длинные имена файлов (максимум 254 байта, в имени может появляться любой символ)
  • Unicode-кодировка имен файлов
  • разреженный файл
  • Жесткие ссылки
  • Символические ссылки
  • Контрольная сумма метаданных

Ограничения:

  • Ограниченный размер раздела. 32-битный номер блока ограничивает размер раздела до 2 ТБ для размера 512 секторов.
  • Не поддерживает сжатые / зашифрованные файлы и каталоги.
0 голосов
/ 29 мая 2009

Очевидно, AddTree использует SHCreateStreamOnFileEx, который, очевидно, поддерживает большие файлы. Я приму ответ, когда проверю.

...