PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# - dezippen?


Monger
2007-11-04, 13:22:10
Hallo,

ich stehe irgendwie auf dem Schlauch, und ich hoffe mir kann einer helfen. Ich hab in einem Verzeichnis eine Menge Zip Dateien rumliegen, die aber strukturell intern wie Kraut und Rüben sind, und ich hätte gerne ein Tool womit ich die alle in eine Form bringen kann.

Was ich genau gerne tun würde, ist:

- Alle Zips in einem Verzeichnis suchen
- Zips einlesen
- Alle Dateien aus diesem Zip auflisten
- Alle Dateien nach bestimmten Kriterien auswählen, und entzippen

Speziell in dem Fall geht es mir eigentlich nur darum, alle Unterverzeichnisse in eine flache Hierarchie einzuordnen. Das alleine geht mit nem vernünftigen Tool à la WinRar wahrscheinlich auch, aber für zukünftige Zwecke wüsste ich ganz allgemein gerne, wie man mit Zips vernünftig umgeht. Ich hab mir auch ein paar Tutorials gesucht, aber ich werd einfach nicht schlau aus denen.


Kann mir mal jemand in C# so ein Grobbeispiel geben, wie das aussehen könnte?

Gnafoo
2007-11-04, 21:08:21
Bietet .NET so ohne weiteres überhaupt eine Unterstützung für ZIP-Files? Was mir dazu einfällt ist die #ZipLib [1]. Damit sollte das gehen.

„Alle Zips in einem Verzeichnis suchen“
Sollte mit der DirectoryInfo-Klasse des .NET-Frameworks kein Problem sein.

„Zips einlesen“
Einfach ein ZipFile-Objekt aus der #ZipLib mit dem Dateinamen als Parameter erstellen.

„Alle Dateien aus diesem Zip auflisten“
Mit der Eigenschaft Count und der Methode GetMemberByIndex() kommt man Problemlos an alle Dateien im Zip. Das zurückgegebene ZipEntry-Objekt gibt dir eigentlich alle relevanten Infos fürs Filtern.

„Alle Dateien nach bestimmten Kriterien auswählen, und entzippen“
Nach dem Selektieren kann man sich mit dem entsprechenden ZipEntry-Objekt über die GetInputStream()-Methode des ZipFile-Objekts einen Stream auf die Datei holen. Den kann man dann 1:1 in eine normale Datei herausschreiben.

So würde ich die Sache zumindest angehen. Wenn du den Zugriff auf die Zip-Datei selber schreiben möchtest, dann kann ich dir leider nicht helfen.

[1] http://www.icsharpcode.net/OpenSource/SharpZipLib/
Anm.: Man sollte das Help-File beim Download nicht übersehen. Das ist recht nützlich.

Novox
2007-11-04, 21:56:31
Bietet .NET so ohne weiteres überhaupt eine Unterstützung für ZIP-Files?

Ja, in System.IO.Compression.

Gnafoo
2007-11-05, 00:08:16
Ja, in System.IO.Compression.
Hm soweit ich das Überfliege aber nur für den Kompressionsmechanismus als solchen und nicht für das gesamte Zip-Dateiformat, oder?

Schließlich finde ich da in der MSDN-Library nur den DeflateStream und das ist eben nur ein Stream. Damit alleine kann ich noch lange nicht die in einer Zip-Datei gespeicherten Dateien durchsuchen, Informationen (Dateigröße, Attribute, ...) über diese herausfiltern usw.

Novox
2007-11-05, 01:14:40
Schließlich finde ich da in der MSDN-Library nur den DeflateStream und das ist eben nur ein Stream. Damit alleine kann ich noch lange nicht die in einer Zip-Datei gespeicherten Dateien durchsuchen, Informationen (Dateigröße, Attribute, ...) über diese herausfiltern usw.

Zumindest nicht ohne weiteren Aufwand, ja. Einen GzipStream gibt's übrigens auch noch. Die #ziplib ist in dieser Hinsicht sicherlich mächtiger.

TheGamer
2007-11-05, 14:40:56
Hallo,

ich stehe irgendwie auf dem Schlauch, und ich hoffe mir kann einer helfen. Ich hab in einem Verzeichnis eine Menge Zip Dateien rumliegen, die aber strukturell intern wie Kraut und Rüben sind, und ich hätte gerne ein Tool womit ich die alle in eine Form bringen kann.

Was ich genau gerne tun würde, ist:

- Alle Zips in einem Verzeichnis suchen
- Zips einlesen
- Alle Dateien aus diesem Zip auflisten
- Alle Dateien nach bestimmten Kriterien auswählen, und entzippen

Speziell in dem Fall geht es mir eigentlich nur darum, alle Unterverzeichnisse in eine flache Hierarchie einzuordnen. Das alleine geht mit nem vernünftigen Tool à la WinRar wahrscheinlich auch, aber für zukünftige Zwecke wüsste ich ganz allgemein gerne, wie man mit Zips vernünftig umgeht. Ich hab mir auch ein paar Tutorials gesucht, aber ich werd einfach nicht schlau aus denen.


Kann mir mal jemand in C# so ein Grobbeispiel geben, wie das aussehen könnte?

1. string[] Directory.GetFiles(string path, string filter, XYZOption mode)

XYZOption -> weiss grad den namen nicht (intellisense hilft) ist ein enum ob nur dieses dir oder auch subdirs

2.3.4. eine C# ziplib

Eco
2007-11-08, 20:38:32
http://www.icsharpcode.net/OpenSource/SharpZipLib/