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ď č. 1s 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();