2016-05-05 4 views
0

Also was ich gerade versuche, ist das Öffnen einer .Zip-Datei und das Umbenennen einer Datei darin (.NET 4.6.1). Ich denke nicht, dass ich Bibliotheken von Drittanbietern verwenden darf, da dies eine sehr einfache Operation ist (zumindest dachte ich, weil ich keine MSDN-Funktion zum Umbenennen von Einträgen finden konnte).Einen .Zip-Eintrag nur mit C#/.NET umbenennen?

Ich habe ein paar Wege gefunden, aber sie sind böse. Sie können die Datei auf die Festplatte extrahieren und sie unter einem anderen Namen erneut hinzufügen oder Sie können auch einen neuen Eintrag mit dem neuen Namen in der ZIP-Datei erstellen, die Datei über einen Stream kopieren und den ursprünglichen Eintrag löschen.

Gibt es einen effektiven Weg, dies zu tun? Ich habe zu diesem Zeitpunkt keine Ideen. Ich weiß, dass es mit DotNetZip nur eine Zeile gibt, aber ich kann keine dritte Teilbibliothek verwenden.

Vielen Dank für die Hilfe!

Antwort

1

Verwendung der ZipArchive in System.IO.Compression. Fügt einen .dat zu jedem Eintrag in der angegebenen Zip-Datei:

private static void RenameZipEntries(string file) 
{ 
    using (var archive = new ZipArchive(File.Open(file, FileMode.Open, FileAccess.ReadWrite), ZipArchiveMode.Update)) 
    { 
     var entries = archive.Entries.ToArray(); 
     foreach (var entry in entries) 
     { 
      var newEntry = archive.CreateEntry(entry.Name + ".dat"); 
      using (var a = entry.Open()) 
      using (var b = newEntry.Open()) 
       a.CopyTo(b); 
      entry.Delete(); 
     } 
    } 
} 
+0

Das ist genau das, was ich mit „Sie bedeutete auch einen neuen Eintrag mit dem neuen Namen in der Zip erstellen kann, die Datei durch einen Stream kopieren und löschen die ursprünglicher Eintrag "though = (. – Gaspa79

+0

@Damieh Sie können der Datei keinen neuen Eintrag hinzufügen, ohne den Hole File Buddy neu zu schreiben. Es ist nur möglich, wenn der neue Name die gleiche Länge wie der alte Name hat. Und selbst dann würden Sie Wahrscheinlich müssen Sie die Zip-Datei selbst auseinander nehmen. –

+0

Ich möchte keinen neuen Eintrag hinzufügen. Nur umbenennen. Also, um die Datei umzubenennen, muss ich den gesamten Inhalt kopieren? Es wäre kein Problem, wenn die Datei, die ich versuche, umzubenennen, war nicht wie 900MB Oh und danke viel – Gaspa79