我正在开发一个Windows Store应用程序概念证明,它将打开.zip文件并将内容解压缩到特定于应用程序的漫游文件夹。我已经研究了几个流行的库来提取内容,却发现这些库不支持Windows应用商店应用程序(至少目前还没有)。所以,我决定选择ZipArchive。我在按钮单击处理程序中有以下代码:
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
var fileOpenPicker = new FileOpenPicker();
fileOpenPicker.FileTypeFilter.Add(".zip");
var openedFile = await fileOpenPicker.PickSingleFileAsync();
var booksFolder = await Windows.Storage.ApplicationData.Current.RoamingFolder.CreateFolderAsync("Stuff", CreationCollisionOption.OpenIfExists);
var folder = await booksFolder.CreateFolderAsync(openedFile.Name.Replace(".zip", string.Empty), CreationCollisionOption.ReplaceExisting);
using (var stream = await openedFile.OpenStreamForReadAsync())
{
using (var zip = new ZipArchive(stream, ZipArchiveMode.Read))
{
foreach (var entry in zip.Entries)
{
using (var entryStream = entry.Open())
{
var file = await folder.CreateFileAsync(entry.Name);
using (var decompressedStream = await file.OpenStreamForWriteAsync())
{
using (var deflateStream = new DeflateStream(entryStream, CompressionMode.Decompress))
{
await deflateStream.CopyToAsync(decompressedStream, (int)entry.Length);
}
}
}
}
}
}
}
但是,我在行<{1}}
InvalidDataException
以下是例外的详细信息:
await deflateStream.CopyToAsync(decompressedStream, (int)entry.Length);
我尝试导入的.zip文件是使用Windows资源管理器的“发送到压缩(Zipped)文件夹”选项创建的。我还尝试使用ZipArchive在代码中创建一个.zip文件,但我也得到了更多的例外代码。既然这不是我理想的用例,我不会包含我的代码来创建.zip,除非它对某人有用。
我希望有人能够在上面的代码中看到我的方式的错误,或者提供一个实体库的链接来处理优选开源的zip文件。这位沮丧的开发人员非常感谢任何帮助。
答案 0 :(得分:0)
您不必解压缩entry.Open()
的结果。它已经解压缩了。
您还可以使用ZipFileExtensions.ExtractToDirectory
(http://msdn.microsoft.com/en-us/library/system.io.compression.zipfileextensions.extracttodirectory.aspx)来简化代码。