2013-08-21 17 views
6

Muszę utworzyć dwa foldery wewnątrz pliku ZIP, który tworzę programowo przy użyciu ICSharpCode.SharZipLib.Zip. Chcę:Jak dodać folder do archiwum zip z 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; 
     } 
    } 

Jak mogę utworzyć katalog używając ZipEntry i jak następnie dodać pliki do katalogu znajdującego się wewnątrz archiwum z pocztowy?

Odpowiedz

11

I zdobione:

  • Można po prostu zrobić new ZipEntry("Folder1/Archive.txt"); i new ZipEntry("Folder2/Archive2.txt");
2

Odpowiedź powyżej będzie działać przez kilka scenariuszy, ale to nie będzie działać, gdy chcemy dodać pusty folder do pliku zip.

Przeszukałem kod SharpZipLib i odkryłem, że jedyną rzeczą, którą musisz zrobić, aby utworzyć folder, jest końcowy ukośnik "/" w nazwie ZipEntry.

Oto kod z biblioteki:

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

Tak, tylko tworzyć foldery, jakby to pliki z ZipEntry i umieścić ukośnik na końcu. To działa. Testowałem to.

+0

Dziękuję za komentarz. Nie zadałem tego pytania właściwie. To, co naprawdę chciałem zrobić, to stworzyć kombinację folderów i plików, której odpowiedź, na którą dałem, działa. –

+1

Tak. Właśnie dodałem swój komentarz, ponieważ szukałem odpowiedzi w celu dodania pustego folderu. Teraz ludzie znajdą obie odpowiedzi. –

1

Najlepszym rozwiązaniem w naszym projekcie było przełączyć się na lepsze

https://dotnetzip.codeplex.com

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

metody są bardziej proste w użyciu

+0

Podobnie jak w przypadku wielu firm, nie miałem wyboru biblioteki, której można użyć. Ta biblioteka była używana od lat. Już nie jestem z firmą :) więc założę się, że użyję dotnetzip, specjalnie semverd. –