在C#中提取Zip文件的例外情况

我正在研究提取代码以提取Zip文件,在winrt中使用C#。

我在这里从本地驱动器获取文件:

StorageFile file = await KnownFolders.PicturesLibrary.GetFileAsync("dostoyevsky-poor-folk.zip"); Stream zipMemoryStream = await file.OpenStreamForReadAsync(); var folder = ApplicationData.Current.LocalFolder; // Create zip archive to access compressed files in memory stream using (ZipArchive zipArchive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Read)) { // For each compressed file... foreach (ZipArchiveEntry entry in zipArchive.Entries) { if (entry.Name == "") { // Folder await CreateRecursiveFolder(folder, entry); } else { // File await ExtractFile(folder, entry); } } } 

我在这里提取文件夹:

 private async Task CreateRecursiveFolder(StorageFolder folder, ZipArchiveEntry entry) { var steps = entry.FullName.Split('/').ToList(); steps.RemoveAt(steps.Count() - 1); foreach (var i in steps) { await folder.CreateFolderAsync(i, CreationCollisionOption.OpenIfExists); folder = await folder.GetFolderAsync(i); } } 

我在这里提取文件:

 private async Task ExtractFile(StorageFolder folder, ZipArchiveEntry entry) { var steps = entry.FullName.Split('/').ToList(); steps.RemoveAt(steps.Count() - 1); foreach (var i in steps) { folder = await folder.GetFolderAsync(i); } 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(); } } } 

当我尝试使用它时,我得到了这个exception: ‘System.NullReferenceException’ 。 Exception get行是await outputFileStream.FlushAsync();的最后一行await outputFileStream.FlushAsync();

有时我尝试从Local Drive中选择文件时会遇到相同的exception。 在获取exception之前, await outputFileStream.FlushAsync()的调试器值如下所示。

在此处输入图像描述

你能帮助我吗?

谢谢

最后,它为我工作。 为什么因为我在提取时获得Null值因为我要提取文件的包。 我相信这是使用c#为Windowsapp store提取Zip文件的完美解决方案。 谢谢