2013-08-21 13 views
6

Devo creare due cartelle all'interno di un file zip che creo a livello di codice utilizzando ICSharpCode.SharZipLib.Zip. Voglio:Come si aggiunge una cartella in un archivio zip con 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; 
     } 
    } 

Come si crea una directory utilizzando ZipEntry e come si fa quindi aggiungere i file nella directory che si trova all'interno dell'archivio Zip ?

risposta

11

ho capito:

  • Si può semplicemente fare new ZipEntry("Folder1/Archive.txt"); e new ZipEntry("Folder2/Archive2.txt");
2

La risposta di cui sopra lavorerà per diversi scenari, ma non funziona quando si desidera aggiungere una cartella vuota in un file zip.

Ho setacciato il codice SharpZipLib e ho scoperto che l'unica cosa che devi fare per creare una cartella è la barra "/" finale del nome ZipEntry.

Ecco il codice dalla libreria:

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

Quindi, basta creare cartelle come se si tratta di file con ZipEntry, e mettere una barra alla fine. Funziona. L'ho provato

+0

Grazie per il tuo commento. Non ho fatto la domanda correttamente. Quello che volevo veramente fare è creare una combinazione di cartella + file, a cui la risposta che ho dato funziona. –

+1

Sì. Ho appena aggiunto il mio commento perché stavo cercando su google per una risposta all'aggiunta di una cartella vuota. Ora le persone troveranno entrambe le risposte. –

1

La migliore soluzione al nostro progetto è stato quello di passare al modo migliore

https://dotnetzip.codeplex.com

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

i metodi sono più dritto in avanti per usare

+0

Come nel caso di molte aziende, non avevo scelta sulla libreria da utilizzare. Questa lib era usata per anni. Non sono più in compagnia però :) quindi scommetti che userò dotnetzip, specialmente semverd. –