2012-03-24 43 views
5

Nén Ionic cho phép tôi thêm tệp hiện có vào đối tượng zip và tạo tệp zip. Nhưng xem xét rằng tôi đang đọc những byte [] từ tệp zip đã tạo và gửi qua máy chủ, tôi cần phải tạo lại tệp zip từ byte đó [] để lưu trữ zip trên máy chủ. Làm thế nào để đạt được điều này?Ionic Zip: Tạo tệp Zip từ byte []

Tôi đang sử dụng C#.

Trả lời

16

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn sẽ có được mảng byte[] dữ liệu của bạn qua mạng và muốn lưu dữ liệu trong một file zip? Bạn có thể tạo mới ZipEntry từ một MemoryStream mà bạn tạo từ byte[] bạn có (như trong docs):

byte[] data = MethodThatReceivesYourDataOverTheNet(); 
using (MemoryStream stream = new MemoryStream(data)) 
{ 
    using (ZipFile zip = new ZipFile()) 
    { 
     zip.AddEntry("name_of_the_file_in_the_arhive.bin", "base", stream); 
     zip.Save("example.zip"); 
    } 
} 
+0

Cảm ơn. Đó là chính xác những gì tôi đang tìm kiếm. – Cannon

+0

AddEntry không còn cung cấp hàm tạo này nữa. Người duy nhất cho phép một luồng được truyền là bây giờ AddEntry ([tên tệp], [Luồng]). – JRodd

9

Nó không thực sự rõ ràng từ câu hỏi của bạn những gì bạn đang làm - nhưng nếu bạn chỉ cố gắng để tránh tiết kiệm vào đĩa và sau đó tải lại để lấy dữ liệu, chỉ cần lưu vào một MemoryStream:

byte[] data; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    zipFile.Save(ms); 
    data = ms.ToArray(); 
} 
// Do whatever with data. 

Ngoài ra, sử dụng MemoryStream.GetBuffer() để tránh làm cho một bản sao:

byte[] buffer; 
int length; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    zipFile.Save(ms); 
    buffer = ms.ToArray(); 
    length = ms.Length; 
} 

// Now use buffer, but only up to "length"... 
Các vấn đề liên quan