PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Basic Ordner zippen.


Geldmann3
2010-01-29, 00:43:59
Kann mir jemand sagen wie ich mit Visual Basic einen Ordner zippen kann? Am besten wäre es wenn der User zuerst einen Ordner auswählen könnte um diesen dann anschließend einfach zu zippen.

Ich habe natürlich schon Google für dieses Thema benutzt doch da komme ich immer entweder an kostenpflichtige .dll Downloads oder ich weiss nicht wie ich das ganze umsetze.

(Bin noch vergleichsweise ein Anfänger, das aufwändigste was ich in VB gemacht habe war bisher ein Taschenrechner mit 10 Funktionen.)

Ich wäre für eure Hilfe und Ratschläge dankbar.
Edit:
Es muss auch nicht unbedingt .zip sein, es kann auch ein beliebiges anderes Kompressionsverfahren sein welches Ordner komprimieren kann.

Yavion
2010-01-29, 09:26:14
Nun, falls du mit Visual Studio arbeitest, kannst Du in der Toolbox einen saveFileDialog finden. Der nimmt Dir im Prinzip schonmal die Hauptarbeit ab.
http://msdn.microsoft.com/de-de/library/system.windows.forms.savefiledialog.aspx

analog gibts das auch als openfiledialog (geht natürlich auch mit Ordnern).

Der andere Teil (ZIP) Archiv sollte auch recht leicht gehen: Weiss jetzt zwar nicht aus dem Kopf aber evtl:
System.IO.Compression.GZipStream

oder evtl treffender:
http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx

Geldmann3
2010-01-29, 16:07:39
Vielen Dank, das war sehr hilfreich!
Ich werde mal nachsehen wie weit ich damit komme und mich dann noch mal melden.

Gast
2010-02-02, 14:20:10
Eine streambasierte Komprimierung führt nicht zu wirklich brauchbaren Ergebnissen. Für eine ordentliche Komprimierung muss die Datei zuerst analysiert werden und dann kann sie erst komprimiert werden. Oft sind die Dateien mit dem GZipStream größer als vorher.
Weiters kann man damit zwar eine Datei komprimieren, aber es gibt keine Möglichkeit ein Archiv mit mehreren Dateien zu erzeugen, das dann z.B. von WinRAR gelesen werden soll.
Im Internet habe ich keine einfache, kostenlose Alternative gefunden, die das kann. Entweder wurde nur eine Datei unterstützt oder es wurde für das Archiv ein eigenes Dateiformat verwendet, das mit sonst nichts lesbar war.

Ich habe letztes Mal die CommandLine Version von 7-zip verwendet. Damit kann man auch zip Dateien erstellen. Das geht ganz flott, komprimiert halbwegs brauchbar und ist auch ziemlich einfach zu handhaben.
Diese Variante hat jedoch 2 Nachteile:
1.) Man kann den Code nicht einfach in seine Standardbibliothek mit einbinden, sondern muss die Datei extra ausliefern. Stört aber so nicht wirklich, da man mit einer .exe meistens sowieso nicht auskommt und einen Ordner braucht.
2.) Bei einem IO Fehler ist das nur in der Ausgabe von 7-zip zu sehen, aber es wird keine Exception geworfen. Man muss sich bei Zugriffsfehlern also gut überlegen, was passiert, wenn auf eine Datei nicht zugegriffen werden kann. Ich habe es so gelöst, dass ich zuerst alles in einen temporären Ordner verschiebe und von dort wegzippe. Beim Entpacken lösche ich zuerst den alten Inhalt (bzw. verschiebe ich ihn in den Backup Ordner) und entpacke dann die neuen Daten. Das hat sich für mein Projekt als ganz brauchbar erwiesen, da ich auf einen USB Stick zippe, der sowieso langsam ist und die Daten nicht zu viel sind. Bei anderen Operationen geht das jedoch nicht.

RattuS
2010-02-15, 11:43:07
7zip ist doch opensource oder? Theoretisch könnte man den Algorithmus konvertieren... :ulol:

Der_Donnervogel
2010-02-15, 17:25:48
Die einfachste Lösung, sofern das Programm auf einem halbwegs aktuellen Windows läuft, wäre die zip-Funktionalität von Windows selbst zu verwenden. Man braucht nur ein leeres Zip-Archiv und dann kann man anschließend einfach Dateien und Ordner ganz normal hinein kopieren. Packen und entpacken übernimmt Windows automatisch. Das Zip-Archiv kann man entweder direkt aus dem Code heraus erstellen, oder die noch einfachere Variante ist man legt eines dem Programm bei, das dann bei Bedarf einfach kopiert wird.
Ich habe natürlich schon Google für dieses Thema benutzt doch da komme ich immer entweder an kostenpflichtige .dll Downloads oder ich weiss nicht wie ich das ganze umsetze.Solche Sachen gibts aber schon. Hier (http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/komponenten/komponente0020.shtml) mal etwas für VB6, das ich nicht ca. 10 Sekunden Google Recherche gefunden habe.

PatkIllA
2010-02-15, 21:17:15
7zip ist doch opensource oder? Theoretisch könnte man den Algorithmus konvertieren... :ulol:
Da gibt es sogar eine .NET Adaptierung.