Seite 1 von 1

quazip c++ ordner/directory zippen

Verfasst: 10. Dezember 2010 17:54
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

Verfasst: 11. Dezember 2010 10:07
von Christian81
Im Dateinamen können natürlich auch Pfade stehen.

Verfasst: 15. Dezember 2010 08:46
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

Verfasst: 15. Dezember 2010 08:50
von Christian81
Dem QuaZipNewInfo() kann man auch Pfade angeben - Du gibst nur Dateinamen an...

Verfasst: 21. Dezember 2010 15:45
von Aenni
dank dir werde es testen und resultate melden ;)

Verfasst: 22. Dezember 2010 09:02
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 ;)