Tôi đang xây dựng một ứng dụng kiểu metro cho windows 8 và tôi có tệp zip mà tôi đang tải xuống từ dịch vụ web và tôi muốn giải nén nó.giải nén tệp ZIP trên windows 8 C#
Tôi đã xem mẫu để nén và giải nén, nhưng phải mất một tệp duy nhất để nén/giải nén nó. Tôi có toàn bộ cấu trúc thư mục mà tôi cần trích xuất.
Dưới đây là những gì tôi có cho đến nay:
var appData = ApplicationData.Current;
var file = await appData.LocalFolder.GetItemAsync("thezip.zip") as StorageFile;
var decompressedFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("tempFileName", CreationCollisionOption.GenerateUniqueName);
using (var decompressor = new Decompressor(await file.OpenSequentialReadAsync()))
using (var decompressedOutput = await decompressedFile.OpenAsync(FileAccessMode.ReadWrite))
{
var bytesDecompressed = await RandomAccessStream.CopyAsync(decompressor, decompressedOutput);
}
Nhưng điều này là không tốt, biến bytesDecompressed
luôn kích cỡ bằng không, nhưng File zip là 1,2MB
Bất kỳ trợ giúp ở đây sẽ rất đánh giá cao.
EDIT: trả lời, nhờ Mahantesh
Đây là mã cho giải nén một tập tin:
private async void UnZipFile()
{
var folder = ApplicationData.Current.LocalFolder;
using (var zipStream = await folder.OpenStreamForReadAsync("thezip.zip"))
{
using (MemoryStream zipMemoryStream = new MemoryStream((int)zipStream.Length))
{
await zipStream.CopyToAsync(zipMemoryStream);
using (var archive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Read))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.Name != "")
{
using (Stream fileData = entry.Open())
{
StorageFile outputFile = await folder.CreateFileAsync(entry.Name, CreationCollisionOption.ReplaceExisting);
using (Stream outputFileStream = await outputFile.OpenStreamForWriteAsync())
{
await fileData.CopyToAsync(outputFileStream);
await outputFileStream.FlushAsync();
}
}
}
}
}
}
}
}
tôi đã triển khai mã này để giải nén tệp zip có trong thư mục ApplicationData.Current.LocalFolder của tôi. Nhưng zip chứa thư mục và thư mục con. Vì vậy, mã, khi chạy, cung cấp cho "Truy cập bị từ chối lỗi" trong khi thực hiện chờ đợi outputFile.OpenStreamForWriteAsync() hoạt động trong các thư mục con. Tuy nhiên, lỗi được nhìn thấy ở bất kỳ thư mục con ngẫu nhiên nào khi mã được chạy nhiều lần. Bất kỳ ý tưởng về điều này? –
Ok .. lỗi là tôi đã thực hiện phương pháp UnZipFile là phương pháp tĩnh mà tôi không nên làm ... –