簡體   English   中英

在C#中提取Zip文件時出現異常

[英]Exception on Extracting the Zip file in C#

我正在使用在Winrt中使用C#的提取代碼來提取Zip文件。

我在這里從本地驅動器獲取文件:

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();
            }
        }
    }

當我嘗試使用此方法時,出現以下異常: 'System.NullReferenceException' 異常獲取行是await outputFileStream.FlushAsync();的最后一行await outputFileStream.FlushAsync();

有時,當我嘗試從本地驅動器中選擇文件時,也會遇到相同的異常。 在獲取異常之前, await outputFileStream.FlushAsync() Debugger的值如下: await outputFileStream.FlushAsync()

在此處輸入圖片說明

你能幫我嗎

謝謝

最后,它對我有用。 為什么因為提取時獲取Null值,因為要提取文件的軟件包。 我確信這是使用c#為Windows應用商店提取Zip文件的完美解決方案。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM