Все архивы, с которыми у меня возникли проблемы, были созданы путем слияния рабочего архива с несуществующим архивом, таким образом, эффективно копируя содержимое одного в другой .Это часть процесса слияния, которое мы делаем.Вот так ...
ZipDestination := TZipForge.Create(nil);
if FileExists(DestinationZipFileName) then
ZipDestination.OpenArchive(fmOpenReadWrite + fmShareDenyWrite)
else
ZipDestination.OpenArchive(fmCreate);
ZipDestination.Zip64Mode := zmAuto;
ZipDestination.MergeWith(SourceZipFileName);
ZipDestination.CloseArchive;
и это код, который получает большой двоичный объект из архива, распаковывает его и делает его готовым для просмотра.
CompressedStream := TMemoryStream.Create;
UnCompressedStream := TMemoryStream.Create;
GetCompressedStream(CompressedStream); // this fetches the blob from the zipfile
ZipForge.InMemory := True;
// Native Error 00035 on next line (sometimes)
ZipForge.OpenArchive(CompressedStream, False);
ZipForge.FindFirst('*.*', ArchiveItem, faAnyFile - faDirectory);
sZipFileName := ArchiveItem.FileName;
sZipPath := ArchiveItem.StoredPath;
ZipForge.ExtractToStream(sZipPath + sZipFileName, UnCompressedStream);
ZipForge.CloseArchive;
но иногда я сталкиваюсь с "Собственной ошибкой 00035" .
Теперь странно то, что Я получаю эти ошибки, когда пытаюсь просмотреть первый BLOB-объект в объединенном архиве (т. е. попытка просмотреть другие BLOB-объекты в объединенном архиве не вызывает никаких исключений)
Это может быть что-то в ZipForge.Merge, с которым я не работал, или это может быть ошибка в моемGetCompressedStream (но если я переключаю порядок двоичных объектов в архиве, это всегда происходит только с первым). Похоже, пришло время тестовому проекту увидеть, что на самом деле происходит.
РЕДАКТИРОВАТЬ
Первоначальный вопрос просто спрашивал руководство по этим роднымОшибки, для которых я удовлетворен выбранным ответом.Что касается моей проблемы, я уверен, что это проблема с CompressedStream, которую я передаю в OpenArchive.