Hallo Leute,
Ich bin neu hier und das ist mein erstr Post. Ich habe ein Problem. Und zwar will ich mit SharpZipLib nicht einen Ordner zippen, das habe ich schon hinbekommen, sondern eine Liste von Dateien. Ich habe eine Methode, die mir eine Liste von den nötigen Datei-Objekten generiert. Diese haben 3 Werte (Name, Pfad und HashWert). Bei Bedarf kann ich weitere hinzufügen. Jetzt möchte ich anhand einer Liste eine neue .Zip Datei erstellen, die die nötigen Dateien in der richtigen Ordnerstruktur beinhaltet. Das sehe in etwa folgendermaßen aus:
DateiListe
---------------------------------
| Datei1.txt
| D:\Test
| HierstehtderHashWert
---------------------------------
| Datei2.txt
| D:\Test\SubDir
| HierstehtderHashWert
---------------------------------
| Datei3.txt
| D:\Test\SubDir\SubDir2
| HierstehtderHashWert
---------------------------------
Nach vielen fehlgeschlagenen Versuchen wollte ich mein Problem hier präsentieren, in der Hoffnung auf eine Lösung.
Diesen Code verwende ich, um einen Ordner samt Unterordner zu zippen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| public void Zippe(string DateiPfad, string Verzeichnis) { try { ZipOutputStream ZOS = new ZipOutputStream(File.Create(DateiPfad)); ZOS.SetLevel(1); DirectoryInfo maindir = new DirectoryInfo(Verzeichnis); string parentPath = maindir.Parent.FullName + @"\"; GoSubdirs(ref ZOS, Verzeichnis, parentPath); ZOS.Close(); MessageBox.Show("Die .Zip Datei wurde erfolgreich erstellt."); } catch (Exception exc) { MessageBox.Show(exc.ToString()); }
}
private void GoSubdirs(ref ZipOutputStream s, string path, string parentPath) { DirectoryInfo dir = new DirectoryInfo(path); foreach (DirectoryInfo subdir in dir.GetDirectories()) { GoSubdirs(ref s, subdir.FullName, parentPath); } foreach (FileInfo fi in dir.GetFiles()) { FileStream fs = File.OpenRead(fi.FullName);
byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); ZipEntry entry = new ZipEntry(dir.FullName.Replace(parentPath, "") + "/" + fi.Name); entry.Size = fs.Length; fs.Close(); s.PutNextEntry(entry); s.Write(buffer, 0, buffer.Length); } } |
Das funktioniert auch. Leider schaffe ich es nicht, dass der mir Dateien, die ich ihm in einer Liste gebe, alle in das selbe Archiv zipped. Ich habe versucht seit mehreren Tagen das problem selber zu lösen, aber ich schaffe es einfach nicht. Ich sollte auch erwähnen, dass ich erst seit wenigen Wochen mit C# arbeite. Vielleicht gibt es ja eine einfache Lösung, die ich selber nicht finde. In dem Fall wäre ich euch dankbar, wenn ihr mir zumindest einen Hinweis oder so geben könntet. Schon mal Danke im Voraus.
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mo 17.03.2008 um 15:29