Собственные ошибки ZipForge - PullRequest
       0

Собственные ошибки ZipForge

1 голос
/ 24 августа 2011

Все архивы, с которыми у меня возникли проблемы, были созданы путем слияния рабочего архива с несуществующим архивом, таким образом, эффективно копируя содержимое одного в другой .Это часть процесса слияния, которое мы делаем.Вот так ...

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.

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Собственная ошибка 00035: «Неверный файл архива».Это происходит, когда ZipForge не может найти ни локальный, ни центральный заголовок каталога (то есть, когда вы пытаетесь открыть файл, который не является zip).

Я не думаю, что они задокументированы всправка, но таблицы перевода для собственной ошибки в код ошибки происходят в ZFConst.pas.Есть таблица NativeToErrorCode, которая преобразует из «родной» ошибки в индекс в массиве строк ошибок.Если этого недостаточно, чтобы сказать вам, в чем проблема, просто посмотрите в ZipForge.pas код ошибки в операторе raise.Они постоянно используют полный 5-значный код, поэтому вы можете искать 00035 вместо просто 35, чтобы избежать ложных результатов.

2 голосов
/ 24 августа 2011

Бесплатная поддержка от продавца ZipForge http://componentace.com/help/zf_guide/gettinghelpfromtechnicalsu.htm

...