Zum Inhalt springen

Dateien entpacken in einem C++ Programm


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe mir eine Library gezogen, mit deren hilfe ich .zip-Dateien entpacken kann. (Library auch zum packen geeignet)

Hier hab ich die Library her: Zip Utils - clean, elegant, simple, C++/win32

Nach einbinden der "unzip.cpp", includieren von "unzip.h" und einbringen des folgenden Codeschnippsels an meiner gewünschten Stelle (einem TImage-Objekt, welches als Button dient) funktioniert das entpacken auch tadellos.

  HZIP hz = OpenZip("c:\\stuff.zip",0);

  ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems=ze.index;

  for (int i=0; i<numitems; i++)

  { GetZipItem(hz,i,&ze);

    UnzipItem(hz,i,ze.name);

  }

  CloseZip(hz);

Nun zu meinem Problem: Wenn ich einen Ordner innerhalb der .zip habe, dann wird dieser nicht mit entpackt.

Was muss ich tun, damit dies geschieht?

Ich hoffe, das waren ausreichende Hintergrund Informationen :)

Bei Fragen, bitte fragen!

Viele liebe Grüße

Julia

Geschrieben

nein, keine fehlermeldung und gar nichts.

wenn ich im debugmodus bin und einen breakpoint gesetzt habe, dann heißt es, dass die variable "ze.index" auf 0 ist, was bedeutet, dass "numitems" auf 0 ist und dann wird ja die for-schleife zum entpacken nicht ausgeführt:

 for (int i=0; i<numitems; i++)

  { GetZipItem(hz,i,&ze);

    UnzipItem(hz,i,ze.name);

  }


Geschrieben

ach mist, ich hatte die variablen "ze.index" und "numitems" global deklariert und "numitems" auch gleich den globalen index zugewiesen..

also index ist im globalen auf 0, numitems = index, also numitems auch gleich 0, kein wunder, dass da nix passiert...so ein blöder fehler...

Doch jetzt is da noch ein kleines weiteres Problem:

Ich möchte ja keine .zip direkt zuweisen, der Benutzer soll sich eine Auswählen, mein Code:

AnsiString path;

  OpenDialog->Filter = "Zip-Dateien|*.zip";

  OpenDialog->Execute();

  path = OpenDialog->Files->Text;

  path = path.Delete(path.Length()-1,2);

  HZIP hz = OpenZip(path,0);

In der letzten Zeile kommt dann eine Fehlermeldung:

E2285 Keine Übereinstimmung für 'OpenZip(AnsiString,int)' gefunden

Geschrieben

Ich hab mal geguckt, jepp gibt's ne Methode für:

.c_str() <- Bildet einen Null-Terminierten String

Also in meinem Fall:

path.c_str();

Ich danke dir sehr für deine Mühen^^

Hast mir sehr geholfen und nochmal entschuldige für meine kleine "Dummheit"

Liebe Grüße

Julia

Geschrieben

Ich wollte noch eine kleine "erweiterung" einbringen, sodass ich den erscheinenden Ort der entpackten Dateien festlegen kann.

Das soll so aussehen:

Ich habe einen Ordner erstellt, in den die Dateien geladen werden sollen.

Momentan werden die Dateien an dem Ort der .zip entpackt

Den Pfadnamen des "neu" erstellten Ordners möchte ich dann einfach mit angeben.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...