Über Ionic.Zip.dll Dateien Zippen

NSR

Mitglied
Sers Leute,
(Link zu der Seite wos die dll gibt: http://www.codeplex.com/DotNetZip)
mein Problem ist nicht, wie man ein Zip erstellt. Des weiß ich schon nämlich so:
Code:
using (ZipFile zip = new ZipFile())
{
    zip.Save(sfd.FileName);   //sfd = SaveFileDialog
}

Das hinzufügen von dateien ist auch kein Problem:
Code:
zFile = new ZipFile(ofd.FileName);    //ofd = OpenFileDialog

foreach (string var in ofd.FileNames)
{
    try    //try und catch, damit man nicht extra überprüfen muss, obs die Datei schon gibt.
    { zFile.AddFile(var); }
    catch (ArgumentException)
    { }
}
zFile.Save();

Mein Problem ist, dass es das Zip immer mit "Unterverzeichnisse Einbeziehen" speichert. D.h. dass beim entpacken immer die Ordner, die zu der Datei führen mit gespeichert werden. (z.b. Datei liegt unter Desktop -> Beim entpacken sind vor dem File die Ordner "Dokumente und Einstellungen, ... , Desktop"). Kann mir einer von euch vielleicht helfen und sagen wie ich das Abgeschaltet bekomme?.
Habe schon :google: aber ohne Erfolg bzw. war auch alles auf Enlisch und des isch meins nicht so gut, könnte also auch theoretisch sein dass ichs einfach überlesen hab :-(. Hab auch die Funktionen der Ionic dll durchgesehen, aber da da nirgends eine Intelicense Hilfe dabei ist bin ich da nicht weit gekommen.
Wäre echt toll, wenn einer von euch mir sagen kann wie des geht. Danke schon einmal im vorraus.
Grüße Nico.
 
Zuletzt bearbeitet:
Also hab jetzt beim weiteren Rumspielen was gefunden.
Und zwar kann man anstatt
Code:
zFile.AddFile(var);
auch
Code:
zFile.AddFile(var,"");
schreiben, was dazu führt, dass der Pfad der Datei = "" ist also nichts.
Dann sind beim entpacken die Ordner nicht dabei. (Mit WinZip rechtsklick auf die .zip datei und Extrahieren in den Ordner (was das gleiche ist wie "hier entpacken") erstellt winzip einen Ordner mit dem Namen der zip datei und entpackt dort die ganzen sachen.
 
Bei einer anderen Möglichkeit die Datei ohne Pfad zu speichern bin ich auf ein Phänomen gestoßen, für dass ich keine Erklärung habe. Vielleicht kann mir ja einer von euch sagen warum es dass tut was es tut.
Code:
foreach (string var in ofd.FileNames)      //ofd = OpenFileDialog
{
    //Damit keine Unterordner gespeichert werden.
    string a;
    a = var.Remove(0,var.LastIndexOf("\\"));    //Es wird der Pfad bis zum letzten \ entfernt
    a = a.Remove(0,1);                         //Das letzte \ wird entfernt;  a = Dateiname.
    try
    { zFile.AddFile(a); }
    catch (ArgumentException)
    {}
}

Das Phänomen ist, dass es Funktioniert, und die Datei dem Zip hinzugefügt wird.
Hab's auch mit Dateien probiert, die nicht auf dem Desktop liegen und auch mit welchen von einer anderen Platte z.B. (D:\\) liegen. Funktioniert alles. Aber wieso. Der Pfad der Datei existiert doch nicht mehr?
Grüße Nico
 
Wie das herumgestrippe da oben trotzdem funktioniert, kann ich dir nicht sagen.

Um die Ordnerstruktur zu erhalten musst du als ersten Parameter den Pfad zur Datei angeben und im zweiten Argument wird der Pfad erwartet, in dem die Datei gespeichert werden sollst.

Wenn man jetzt also mehrere Dateien und Ordner auswählt musst du als zweiten parameter eben immer den Ordnerpfad ohne den höchsten auswählen.
 
Hi.

Um nur Dateinamen ohne Pfad hinzuzufügen:
C#:
zipfile.AddFile(path, System.IO.Path.GetFileName(path));
Kann es sein, das du das Arbeitsverzeichnis wechselst?

Gruß
 
Zurück