/ / KaZip pre C ++ Builder2009 / Delphi - delphi, zip, delphi-2009, c ++ staviteľ

KaZip pre C ++ Builder2009 / Delphi - delphi, zip, delphi-2009, c ++ staviteľ

Mám stiahnuť a nainštalovať KaZip2.0 na C ++ Builder2009 (s malými zmenami => iba nastaviť typ String na AnsiString). Napísal som:

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

teraz vytvorí test.zip s priloženým xxx.txt (59byte original, 21byte packed). Archív otvorím vo WinRARe úspešný a chcem otvoriť xxx.txt, ale WinRAR hovorí, že súbor je poškodený. :(

Čo je zle? Môže mi niekto pomôcť?

Extrakt nefunguje, pretože súbor je poškodený?

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

odpovede:

2 pre odpoveď č. 1

s malými drobnými zmenami => iba nastavené napíšte String to AnsiString

použitie RawByteString namiesto AnsiString.


1 pre odpoveď č. 2

Nemám tušenie, ako je implementovaný KaZip2.0, ale vo všeobecnosti, ak chcete, aby knižnica Delphi / C ++, ktorá bola navrhnutá bez podpory Unicode, fungovala správne, musíte urobiť dve veci:

  • Nahraďte všetky znaky reťazcom AnsiChar a všetky reťazce reťazcom AnsiString
  • Nahraďte všetky volania rozhrania Win API ich variantom Ansi, t. J. Nahraďte AWin32Function funkciou AWin32FunctionA.

V Delphi <2009 Char = AnsiChar, String = AnsiString, AWin32Function = AWin32FunctionA, ale v Delphi> = 2009, predvolene Char = WideChar, String = UnicodeString, AWin32Function = AWin32FunctionW.


0 pre odpoveď č. 3

WinRAR môže jednoducho nedokázať rozpoznať hlavičku. Skúste ho otvoriť v systéme Windows alebo v iných programoch zip.


0 pre odpoveď č. 4

s malými drobnými zmenami => iba nastavené napíšte String to AnsiString

To "nefunguje" vždy správne, môže sa kompilovaťale to neznamená, že to bude fungovať priamo v D2009 alebo CB2009, musíte ukázať miesta, ktoré konvertujú String na AnsiStrings, špeciálne sa zaoberajú kódmi: Buffers, Streams a I / O.


0 pre odpoveď č. 5

Nie je prekvapením, že váš kód je nesprávny; KaZip nemá žiadnu dokumentáciu.

Správny kód je:

//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();