2013-08-21 34 views
6

Tôi phải tạo hai thư mục bên trong tệp zip mà tôi tạo bằng cách lập trình sử dụng ICSharpCode.SharZipLib.Zip. Tôi muốn:Làm thế nào để bạn thêm một thư mục vào kho lưu trữ zip với 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; 
     } 
    } 

Làm thế nào để tạo ra một thư mục bằng ZipEntry và làm thế nào để sau đó thêm các tập tin vào thư mục nằm bên trong các kho lưu trữ Zip ?

Trả lời

11

I figured it out:

  • Bạn chỉ có thể làm new ZipEntry("Folder1/Archive.txt");new ZipEntry("Folder2/Archive2.txt");
2

Câu trả lời ở trên sẽ làm việc cho một vài tình huống, nhưng nó sẽ không hoạt động khi bạn muốn thêm một thư mục trống vào một tệp zip.

Tôi đã rà soát qua mã SharpZipLib và thấy rằng điều duy nhất bạn cần làm để tạo thư mục là dấu "/" phía trước dấu gạch chéo trên tên ZipEntry.

Dưới đây là đoạn code từ thư viện:

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

Vì vậy, chỉ cần tạo các thư mục như thể họ là các tập tin với ZipEntry, và đặt một dấu gạch chéo ở cuối dòng. Nó hoạt động. Tôi đã thử nghiệm nó.

+0

Cảm ơn bạn đã bình luận của bạn. Tôi không hỏi đúng câu hỏi. Những gì tôi thực sự muốn làm là tạo ra một thư mục + tập tin kết hợp, mà câu trả lời mà tôi đã làm việc cho. –

+1

Có. Tôi vừa thêm bình luận của tôi vì tôi đã googling cho một câu trả lời để thêm một thư mục trống. Bây giờ mọi người sẽ tìm thấy cả hai câu trả lời. –

1

Giải pháp tốt nhất tại dự án của chúng tôi đã chuyển sang cách tốt hơn

https://dotnetzip.codeplex.com

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

các phương pháp có nhiều chuyển tiếp thẳng để sử dụng

+0

Như trường hợp với nhiều công ty, tôi không có lựa chọn nào trong thư viện để sử dụng. Lib này đã được sử dụng trong nhiều năm. Tôi không phải với công ty nữa mặc dù :) vì vậy bạn đặt cược tôi sẽ sử dụng dotnetzip, đặc biệt semverd. –