quazip c++ ordner/directory zippen

Alles rund um die Programmierung mit Qt
Antworten
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

quazip c++ ordner/directory zippen

Beitrag von Aenni »

Hallo zusammen,
ich such eine Möglichkeit ein ganzes directory in ein Zip zu speichern.
Sprich auch unterverzeichnise in einem angegeben Verzeichnis.

in der Sufu habe ich leider nur die Möglichkeit gefunden - files eines directorys in ein Zip zu packen, leider nicht die unterverzeichnisse.

Danke wiedermal!

lg

Aenni
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Im Dateinamen können natürlich auch Pfade stehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Beitrag von Aenni »

Christian81 hat geschrieben:Im Dateinamen können natürlich auch Pfade stehen.
das verstehe ich nicht ganz ;)

wenn ich ein "directory" angebe, welches er archivieren soll, packt er alle dateien die in diesem verzeichnis sind, nur leider nicht die Ordner (welche sich auch im verzeichnis befinden).

Code: Alles auswählen


 const QString cartella = QDir::currentPath();
     char c;
     QString zipfile;
     QString ultimacartellaaperta = dirtozip.left(dirtozip.lastIndexOf("/"))+"/";
     QDir dir(ultimacartellaaperta);
     QString dirname = dir.dirName();
     zipfile = dirname.append(".zip");
     if (dir.exists())
     {
        QuaZip zip(zipfile);
        if(!zip.open(QuaZip::mdCreate)) {
        qWarning("testCreate(): zip.open(): %d", zip.getZipError());
        return false;
        }

       QFile inFile;
       QuaZipFile outFile(&zip);
       const QFileInfoList list = dir.entryInfoList();
       QFileInfo fi;

       for (int l = 0; l < list.size(); l++)
       {
          fi = list.at(l);
          if (fi.isDir() && fi.fileName() != "." && fi.fileName() != "..") {
              /* dir */
          }  else if (fi.isFile() and fi.fileName() != zipfile ) {
               QDir::setCurrent(dir.absolutePath());
                inFile.setFileName(fi.fileName());
                if(!inFile.open(QIODevice::ReadOnly)) {
                   qWarning("testCreate(): inFile.open(): %s", inFile.errorString().toLocal8Bit().constData());
                    return false;
                 }
                if(!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(inFile.fileName(), inFile.fileName()))) {
                qWarning("testCreate(): outFile.open(): %d", outFile.getZipError());
                return false;
                }
                 while(inFile.getChar(&c)&&outFile.putChar(c));
                 if(outFile.getZipError()!=UNZ_OK) {
                   qWarning("testCreate(): outFile.putChar(): %d", outFile.getZipError());
                   return false;
                 }
                 outFile.close();
                 if(outFile.getZipError()!=UNZ_OK) {
                   qWarning("testCreate(): outFile.close(): %d", outFile.getZipError());
                   return false;
                 }
                 inFile.close();

          }

       }

         zip.close();
           if(zip.getZipError()!=0) {
           qWarning("testCreate(): zip.close(): %d", zip.getZipError());
           QDir::setCurrent(cartella);
           return false;
           }
     QDir::setCurrent(cartella);
     return true;
     }



 
Das Obige zeigt den code den ich verwende.

Grüsse

Aenni
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dem QuaZipNewInfo() kann man auch Pfade angeben - Du gibst nur Dateinamen an...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Beitrag von Aenni »

dank dir werde es testen und resultate melden ;)
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Beitrag von Aenni »

Leider haben meine Versuche mit einer Übergabe von pfaden nicht funktioniert :(.

Code: Alles auswählen

//...
if(!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(inFile.fileName(), [b]fi.path()[/b]))) { 
//...
Für ne gute idee wäre ich dankbar ;)
Antworten