Проблема при распаковке архива Ods
Модератор: Модераторы
Проблема при распаковке архива Ods
Возникла проблема при распаковке архива Ods при помощи модуля Zipper. Ступор происходит на файле content.xml, выдает ошибку "Invalid CRC checksum while unzipping content.xml" и дальше не идет, с архивом все в порядке, не битый. Может кто-нибудь сталкивался с такой проблемой, подскажите решение. Ось Windows, Lasarus v0.9.28.2бета
Вопрос жизни и смерти! Подскажите, очень надо!
Вот обсуждение формата ODT (распаковка упаковка при помощи Zippera), у меня все открывает и запаковывает назад. ODS тоже лично мной проверено на моем модуле все работает как часы.
Ну уж если не помогло предлагаю свой код:
Ну уж если не помогло предлагаю свой код:
Код: Выделить всё
procedure TOODocument.LoadFromFile(const FileName: String);
var UnZip:TUNZipper;
Procedure LoadDoc(var XMLDoc: TXMLDocument;
const XMLFileName: String);
begin
FreeAndNil(XMLDoc);
if FileExists(XMLFileName) then
ReadXMLFile(XMLDoc, XMLFileName);
end;
begin
if not FileExists(FileName) then exit; //Файла нет, подстава блин...
FullRemoveDir(FTempPath,False); //Очистка папки темп от старых файлов
UnZip:=TUNZipper.Create;
UnZip.FileName := FileName;
UnZip.OutputPath := FTempPath;
try
UnZip.UnZipAllFiles; //Распаковка файлов
finally
UnZip.Free;
end;
//Загрузка файлов в соответствующие XML документы
LoadDoc(FContent,FTempPath+'content.xml'); //content.xml
LoadDoc(FManifest,IncludeTrailingPathDelimiter(FTempPath+'META-INF')+'manifest.xml');//META-INF/manifest.xml
LoadDoc(FMeta,FTempPath+'meta.xml'); //meta.xml
end;
Я использовала вот такой простой код для теста:
Добавлено спустя 1 час 17 минут 32 секунды:
Я делаю так же, на Ubuntu все работает, а на Windows отказывается
Windows XP Professional Service Pack 2 
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
UnZipper: TUnZipper;
begin
UnZipper := TUnZipper.Create;
try
UnZipper.FileName := 'test.ods';
UnZipper.OutputPath := 'test';
try
UnZipper.UnZipAllFiles;
except
on E: Exception do InputBox('', '', E.Message);
end;
finally
FreeAndNil(UnZipper);
end;
end;
Добавлено спустя 1 час 17 минут 32 секунды:
Я делаю так же, на Ubuntu все работает, а на Windows отказывается
lightning писал(а):Я делаю так же, на Ubuntu все работает, а на Windows отказывается
Он так и пишет в ошибках:
"Отказываюсь, потому что меня не поють пивом"?
Vadim писал(а):lightning писал(а):Я делаю так же, на Ubuntu все работает, а на Windows отказывается
Он так и пишет в ошибках:
"Отказываюсь, потому что меня не поють пивом"?
Да если бы
Ну мой код распаковки (указан выше) и упаковки см тему про ODT. Работает и в линухе и в Windows XP SP3. Возможно все связано с самим LCL, я юзаю Лазарус 0.9.29 и FPC 2.4.3 возможно со времени вашей версии Zipper был допилен. Так что мой вам совет скачайте вот отсюда сборку для винды.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Допилен-допилен, причем недавно. Нужно брать свежий unzipper, старый не понимает od? форматов. Точнее, он не понимает, что в них CRC записан не до содержимого файла, а после.
Действительно, скачала новую сборку Lasarus, всё работает!
Благодарю за помощь!
