2013-08-21 14 views
6

Ich muss zwei Ordner innerhalb einer Zip-Datei erstellen, die ich programmgesteuert mit ICSharpCode.SharZipLib.Zip erstellen. Ich möchte:Wie fügen Sie einen Ordner zu einem Zip-Archiv mit ICSharpCode.SharpZipLib

private void AddToZipStream(byte[] inputStream, ZipOutputStream zipStream, string fileName, string fileExtension) 
    { 
     var courseName = RemoveSpecialCharacters(fileName); 

     var m_Bytes = inputStream; 
     if ((m_Bytes != null) && (zipStream != null)) 
     { 
      var newEntry = new ZipEntry(ZipEntry.CleanName(string.Concat(courseName, fileExtension))); 
      newEntry.DateTime = DateTime.Now; 
      newEntry.Size = m_Bytes.Length; 

      zipStream.PutNextEntry(newEntry); 
      zipStream.Write(m_Bytes, 0, m_Bytes.Length); 
      zipStream.CloseEntry(); 
      zipStream.UseZip64 = UseZip64.Off; 
     } 
    } 

Wie kann ich ein Verzeichnis mit ZipEntry erstellen und wie dann Dateien innerhalb des Zip befindet Archiv in das Verzeichnis hinzufügen?

Antwort

11

dachte ich es aus:

  • Sie können einfach tun new ZipEntry("Folder1/Archive.txt"); und new ZipEntry("Folder2/Archive2.txt");
2

Die Antwort oben wird für mehrere Szenarien arbeiten, aber es funktioniert nicht, wenn Sie einen leeren Ordner hinzufügen möchten zu einer Zip-Datei.

Ich habe durch den SharpZipLib-Code gesiebt und festgestellt, dass das einzige, was Sie tun müssen, um einen Ordner zu erstellen, ein abschließender Schrägstrich "/" für den ZipEntry-Namen ist.

Hier ist der Code aus der Bibliothek:

public bool IsDirectory { 
    get { 
     int nameLength = name.Length; 
     bool result = 
      ((nameLength > 0) && 
      ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) || 
      HasDosAttributes(16) 
      ; 
     return result; 
    } 
} 

Also, nur Ordner erstellen, als ob sie Dateien mit ZipEntry sind, und einen Schrägstrich am Ende setzen. Es klappt. Ich habe es getestet. Vielen Dank für Ihren Kommentar

+0

zu verwenden. Ich habe die Frage nicht richtig gestellt. Was ich wirklich machen wollte, ist eine Ordner + Datei-Kombination zu erstellen, für die die Antwort, die ich gab, funktioniert. –

+1

Ja. Ich habe gerade meinen Kommentar hinzugefügt, weil ich nach einer Antwort zum Hinzufügen eines leeren Ordners gegoogelt habe. Jetzt werden die Leute beide Antworten finden. –

1

Die beste Lösung bei unserem Projekt war die Art und Weise besser

https://dotnetzip.codeplex.com

https://github.com/haf/DotNetZip.Semverd

die Methoden sind gerade nach vorn wechseln

+0

Wie bei vielen Firmen, hatte ich keine Wahl in der Bibliothek zu verwenden. Diese Lib wurde jahrelang benutzt. Ich bin aber nicht mehr bei der Firma :) also wette ich, dass ich dotnetzip, speziell semverd, verwenden werde. –