2010-05-06 11 views
1

J'ai télécharger et installer KaZip2.0 sur C++ Builder2009 (avec peu de modifications mineures => seulement mettre type String à AnsiString). J'ai écris:KaZip pour C++ Builder2009/Delphi

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

maintenant, il crée un test.zip avec xxx.txt inclus (59byte original, emballé 21byte). J'ouvre l'archive dans WinRAR avec succès et je veux ouvrir le fichier xxx.txt, mais WinRAR dit que le fichier est corrompu. :(

Quel est le problème? Quelqu'un peut me aider?

Extrait ne fonctionne pas, parce que le fichier est corrompu?

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

Répondre

0

WinRAR pourrait être tout simplement ne reconnaissant pas l'en-tête. Essayez de l'ouvrir dans Windows ou d'autres programmes postaux.

+0

Avec Windows je peux ouvrir le Zip aussi, mais pas à montrer xxx.txt – Katsumi

0

avec peu de modifications mineures => uniquement définir type String à AnsiString

Cela ne fonctionne pas toujours correctement, il peut compiler mais cela ne signifie pas qu'il fonctionnera correctement dans D2009 ou CB2009, vous devez montrer les endroits que vous convertissez Strings en AnsiStrings, spécialement le code traiter avec: Buffers , Streams et E/S.

2

avec peu de modifications mineures => ne définissez type String à

AnsiString

Utilisez RawByteString au lieu de AnsiString.

1

Je ne sais pas comment KaZip2.0 est mis en œuvre, mais en général, pour faire une bibliothèque de Delphi/C qui a été conçu sans support Unicode à l'esprit fonctionne correctement, vous devez faire deux choses:

  • Replace all Char avec AnsiChar et toute la chaîne à AnsiString
  • Remplacez tous les appels Win API par leur variante Ansi, c'est-à-dire remplacez AWin32Function par AWin32FunctionA.

Dans Delphi < 2009, Char = AnsiChar, String = AnsiString, AWin32Function = AWin32FunctionA, mais dans Delphi> = 2009, par défaut, Char = WideChar, String = UnicodeString, AWin32Function = AWin32FunctionW.

0

Il n'est pas surprenant que votre code soit erroné; KaZip n'a pas de documentation.

code approprié est:

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