Có cách nào đó có thể tạo một ZipArchive từ (các) tệp trong bộ nhớ (và không thực sự trên đĩa).Cách tạo ZipArchive từ các tệp trong bộ nhớ trong C#?
Sau đây là trường hợp sử dụng: Nhiều tệp được nhận trong biến số IEnumerable<HttpPostedFileBase>
. Tôi muốn nén tất cả các tệp này lại với nhau bằng cách sử dụng ZipArchive
. Vấn đề là ZipArchive
chỉ cho phép CreateEntryFromFile
, dự kiến một đường dẫn đến tệp, khi tôi chỉ có các tệp trong bộ nhớ.
Câu hỏi: Có cách nào để sử dụng một 'dòng' để tạo ra các 'nhập' trong ZipArchive
, vì vậy mà tôi có thể trực tiếp đưa vào nội dung của tập tin trong zip?
Tôi không muốn lưu tệp đầu tiên, tạo mã zip (từ đường dẫn tệp đã lưu) rồi xóa từng tệp.
Ở đây, attachmentFiles
là IEnumerable<HttpPostedFileBase>
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var attachment in attachmentFiles)
{
zipArchive.CreateEntryFromFile(Path.GetFullPath(attachment.FileName), Path.GetFileName(attachment.FileName),
CompressionLevel.Fastest);
}
}
...
}
Các bạn đã thử này http://stackoverflow.com/questions/12347775/ziparchive- create-invalid-zip-file/12350106 # 12350106? –
Tại sao không tạo tệp tạm thời và sau đó phát hành khi lưu trữ hoàn tất? – RussDunn
Tôi muốn tránh tạo một tệp tạm thời và xóa nó sau đó, nếu có thể. Đó là những gì tôi đã viết trong câu hỏi, nhưng nếu không có cách nào khác, thì tôi sẽ phải làm điều đó. – Flair