Может ли IMAPI2 записывать файлы размером> 4 Гб?
Интерфейс IMAPI2 IFileSystem использует интерфейсы COM IStream для представления данных файла. Существует метод AddTree, который добавляет указанное содержимое каталога в IFileSystem. Таким образом, AddTree должен создавать IStream в процессе. Интересно, какую реализацию IStream он использует? Если он использует стандартную реализацию OLE, то у нас возникает неприятная проблема, поскольку потоки OLE не поддерживают файлы размером более 4 ГБ.
Кто-нибудь может пролить свет на этот вопрос?
2 ответа
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 секторов.
- Не поддерживает сжатый / зашифрованный файл и каталоги.
Очевидно, AddTree использует SHCreateStreamOnFileEx, который, очевидно, поддерживает большие файлы. Я приму ответ, когда проверю.