KaZip для C ++ Builder2009 / Delphi - PullRequest
1 голос
/ 06 мая 2010

У меня есть загрузка и установка KaZip2.0 на C ++ Builder2009 (с небольшими незначительными изменениями => установите только тип String равным AnsiString).Я написал:

KAZip1->FileName = "test.zip";
KAZip1->CreateZip("test.zip");
KAZip1->Active = true;
KAZip1->Entries->AddFile("pack\\text.txt","xxx.txt");
KAZip1->Active = false;
KAZip1->Close();

Теперь он создает test.zip с включенным xxx.txt (59-байтовый оригинал, 21-байтовый пакет).Я успешно открываю архив в WinRAR и хочу открыть xxx.txt, но WinRAR говорит, что файл поврежден.: (

Что не так? Может кто-нибудь мне помочь?

Извлечение не работает, поскольку файл поврежден?

KAZip1->FileName = "test.zip";
KAZip1->Active = true;
KAZip1->Entries->ExtractToFile("xxx.txt","zzz.txt");
KAZip1->Active = false;
KAZip1->Close();

Ответы [ 5 ]

2 голосов
/ 08 мая 2010

с небольшими незначительными изменениями => только установлено введите String to AnsiString

Используйте RawByteString вместо AnsiString.

1 голос
/ 08 мая 2010

Я понятия не имею, как реализован KaZip2.0, но в целом, чтобы библиотека Delphi / C ++, которая была разработана без поддержки Unicode, работала правильно, вам нужно сделать две вещи:

  • Заменить все символы с помощью AnsiChar и все строки на AnsiString
  • Замените все вызовы Win API их вариантом Ansi, то есть замените AWin32Function на AWin32FunctionA.

В Delphi <2009, Char = AnsiChar, String = AnsiString, AWin32Function = AWin32FunctionA, но в Delphi> = 2009, по умолчанию Char = WideChar, String = UnicodeString, AWin32Function = AWin32FunctionW. *

0 голосов
/ 24 апреля 2012

Не удивительно, что ваш код неверен; У KaZip нет документации.

Правильный код:

//Create a new empty zip file
KAZip1->CreateZip("test.zip");

//Open our newly created zip file so we can add files to it
KAZIP1->Open("test.zip");

//Compress text.txt  into  xxx.txt
KAZip1->Entries->AddFile("pack\\text.txt","xxx.txt");

//Close the file stream 
KAZip1->Close();
0 голосов
/ 06 мая 2010

с небольшими незначительными изменениями => только установлено введите String to AnsiString

Это не всегда работает правильно, оно может скомпилироваться, но это не значит, что оно будет работать правильно в D2009 или CB2009, вам нужно показать места, в которые вы конвертируете Strings в AnsiStrings, особенно код, с которым связаны: Buffers, Потоки и ввод / вывод.

0 голосов
/ 06 мая 2010

WinRAR может просто не распознать заголовок. Попробуйте открыть его в Windows или других программах zip.

...