Tôi đang sử dụng để trích xuất Ionic.Zip ZipFile để dòng ký ức với phương pháp này:đọc Zip ion như Memory Suối C#
private MemoryStream GetReplayZipMemoryStream()
{
MemoryStream zipMs = new MemoryStream();
using (ZipFile zip = ZipFile.Read(myFile.zip))
{
foreach (ZipEntry zipEntry in zip)
{
if (zipEntry.FileName.StartsWith("Aligning") || zipEntry.FileName.StartsWith("Sensing"))
{
zipEntry.Extract(zipMs);
}
}
}
zipMs.Seek(0, SeekOrigin.Begin);
return zipMs;
}
Khi tôi đang thực hiện giải nén, tôi muốn đọc những dòng suối và nhận được một số mục nhập dựa trên tên tệp nhập. Làm thế nào tôi có thể làm điều đó?
tôi đã cố gắng bằng cách gọi với mã dưới đây, nhưng tôi nhận được lỗi trên ZipFile.Read(ms)
mà nói:
Không thể đọc mà như một ZipFile
Stream ms = GetReplayZipMemoryStream();
using (ZipFile zip = ZipFile.Read(ms))
{
ZipEntry imageEntry = zip.Entries.First(x => x.FileName.EndsWith(".png"));
using (Stream s = imageEntry.OpenReader())
{
var image = Image.FromStream(s);
pictureBox1.Image = image;
}
}
Cảm ơn bạn trước cho Cứu giúp!
Sau khi bạn đã thực hiện '.Extract() 'dữ liệu (trong dòng mem) không còn được nén ... Bạn có một serie các tập tin không nén được nối. –
Như Henk Holterman gợi ý, trừ khi bạn đang xử lý các tệp zip lồng nhau, bạn không nên giải nén các tệp một lần nữa trong đoạn thứ hai. Bạn có thể cung cấp cấu trúc mẫu của các tệp bạn đang cố gắng giải nén không? Ngoài ra tôi khuyên bạn nên làm tất cả các bộ lọc trong vòng đầu tiên và thậm chí có thể tạo ra hình ảnh đó, để không viết tất cả các tập tin bạn muốn đọc, vào một dòng duy nhất. –
Ngoài các Henk quan sát được thực hiện, tôi sẽ đề nghị bạn không sử dụng Ionic.Zip để làm điều này anyway. .NET hiện có lớp 'ZipArchive', cung cấp chức năng tích hợp để xử lý các tệp .zip, và IMHO nào thuận tiện hơn mã bạn đã có bây giờ. –