2016-04-26 21 views
0

Ich erbte einige Code, der ZipArchive verwendet, um einige Informationen aus der Datenbank zu speichern. Dazu verwendet es BinaryFormatter. Wenn Sie die Zip-Datei mit 7-zip (zum Beispiel) betrachten, sehen Sie ein paar Ordner und eine .txt-Datei. Alles funktioniert gut. Ich möchte einfach den Code ändern, um auch einen Ordner im ZipArchive namens "temp" zu haben, der aus Dateien und Ordnern unter C: \ temp besteht. Gibt es eine einfache Möglichkeit, einen Eintrag (ZipArchiveEntry?) Hinzuzufügen, der aus einem ganzen Ordner oder der CD besteht? Ich habe "CreateEntryFromFile" in den Member-Methoden von ZipArchive gesehen, aber kein CreateEntryFromDirectory. Oder vielleicht gibt es eine andere einfache Möglichkeit, es zu tun? Jeder hat Beispielcode? Ich sollte sagen, dass C: \ temp eine variable Anzahl von Dateien und Verzeichnissen haben könnte (die untergeordnete Verzeichnisse und Dateien haben, usw.) Muss ich sie irgendwie aufzählen, meine eigenen Verzeichnisse erstellen, verwenden Sie CreateEntryFromFile? Jede Hilfe wird geschätzt.Verwenden von .NET ZipArchive zum Zip ganze Verzeichnisse sowie zusätzliche Informationen

Und wenn ich die ZipArchive lesen, möchte ich das Zeug nehmen Bezug auf C: \ temp und es nur in einem Verzeichnis-Dump (wie C: \ temp_old) Danke, Dave

Antwort

0

Die Antwort user1469065 in Zip folder in C# arbeitete für mich. user1469065 zeigt, wie man alle Dateien/Verzeichnisse im Verzeichnis findet (mit einigen coolen "yield" -Anweisungen) und dann die Serialisierung durchführt. Der Vollständigkeit halber habe ich den Code zur deserialize hinzugefügt, wie user1469065 vorgeschlagen hat (zumindest denke ich, dass ich es so gemacht habe, wie er es vorgeschlagen hat).

private static void ReadTempFileStuff(ZipArchive archive) // adw 
    { 
     var sessionArchives = archive.Entries.Where(x => x.FullName.StartsWith(@"temp_directory_contents")).ToArray(); 
     if (sessionArchives != null && sessionArchives.Length > 0) 
     { 
      foreach (ZipArchiveEntry entry in sessionArchives) 
      { 
       FileInfo info = new FileInfo(@"C:\" + entry.FullName); 
       if (!info.Directory.Exists) 
       { 
        Directory.CreateDirectory(info.DirectoryName); 
       } 
       entry.ExtractToFile(@"C:\" + entry.FullName,true); 
      } 
     } 
    }