Wie Sie mit der Entpackungs-ZIP-Datei mit Pfaden umgehen können, die zu lang sind / dupliziert sind
Frage
Wenn Sie Dateien in Windows entkoppeln, habe ich gelegentlich Probleme mit Pfaden
- .
- das ist zu lang für Windows (aber okay in der ursprünglichen Betriebssysteme, die die Datei erstellt hat).
- das sind "Duplikat" aufgrund von Fallindivität
Verwenden von dotnetziP, der generationspflichtige Anruf wird beim Lesen von ZIP-Dateien mit einem dieser Probleme ausgelesen. Was bedeutet, dass ich nicht einmal versuchen kann, es herauszufiltern. generasacodicetagpre.
Was ist der beste Weg, um mit dem Lesen dieser Art von Dateien zu handhaben?
aktualisiert:
Beispiel ZIP von hier: https://github.com/monoreports/monoreports/zipball/master
Duplikate: https://github.com/monoreports/monoreports/tree/master/src/ Monoreports.model / datasourcetype.cs https://github.com/monoreports/monoreports/tree/master/src/monoreports.model/dataSourcetype.cs
Hier ist näher auf der Ausnahme:
ionic.zip.zipexception: Kann das nicht als Zipfel lesen, ---> system.argumentException: Ein> Artikel mit demselben Schlüssel wurde bereits hinzugefügt.
bei System.Throwhelper.throwargumentException (AusnahmeResource-Ressource)
bei System.Collections.Generic.DictionaryZipFile.Read(path)
2.add (T-T-Taste, TValue-Wert)
bei ionic.zip.zipfile.readcentralDirectory (Zipfle ZF)
bei ionic.zip.zipfile.Readintoinstance (zippe ZF)Auflösung: Basierend auf @ Cheesos-Vorschlag, ich kann alles vom Bach lesen, diejenigen, die Duplikate vermeiden, und Pfadprobleme: generasacodicetagpre.
Lösung
Lesen Sie es mit Zipinputstream.
Die ZIPFILE-Klasse hält eine Sammlung mit dem Dateinamen als Index.Doppelte Dateinamen bricht das Modell.
Sie können jedoch den Zipinputstream verwenden, um in Ihrem ZiPFile zu lesen.In diesem Fall gibt es keine Sammlung oder Index.
Andere Tipps
Für das GRATIONACDICETAGCODE-Problem habe ich festgestellt, dass Sie dotnetzip nicht verwenden können.Was ich stattdessen tat, wurde die Befehlszeilenversion von 7-zip ;Das funktioniert Wunder. generasacodicetagpre.