Zip文件损坏时,我把它保存到隔离的存储

本文关键字:保存 隔离 存储 损坏 文件 Zip | 更新日期: 2023-09-27 18:11:15

我已经从blob存储下载了一个zip文件,并像这样保存到windows phone的隔离存储:

public static void SaveToIsolatedStorage(FileStream fs, string fileName)
        {
            var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
            using (var streamWriter =
                            new StreamWriter(new IsolatedStorageFileStream(fileName,
                                FileMode.Create,
                                FileAccess.ReadWrite,
                                isolatedStorage)))
            {
                streamWriter.Write(fs);
            }
        }

但是当使用IsoStoreSpy检查这个zip文件时,它显示损坏。我已经检查了它从孤立的存储读取,并试图解压缩它,但不工作。我确信它是损坏的,因为当我使用IsoStoreSpy与其他zip替换此文件,然后试图解压缩它,然后它是工作的。

编辑: -

从Blob下载代码

private async Task DownloadFileFromBlobStorage()
    {
        var filename = "AppId_2.zip";
        var blobContainer = GetBlobClient.GetContainerReference("testwpclientiapcontainer");
        var blob = blobContainer.GetBlockBlobReference(filename);
        using (var filestream = new FileStream(filename, FileMode.Create))
        {
            await blob.DownloadToStreamAsync(filestream);
            SaveToIsolatedStorage(filestream, filename);
        }
    }

有谁知道我如何保存zip文件到独立存储而不使它损坏吗?

Zip文件损坏时,我把它保存到隔离的存储

您正在使用StreamWriter。这是用于文本的。您根本不应该使用它来复制zip文件。对于二进制数据,永远不要使用TextWriter

接下来你将使用StreamWriter.Write(object),它将在FileStream上调用ToString。那也不行。

你应该创建一个IsolatedStorageStream,然后调用fs.CopyTo(output)

public static void SaveToIsolatedStorage(Stream input, string fileName)
{
    using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
    {
        // Simpler than calling the IsolatedStorageFileStream constructor...
        using (var output = storage.CreateFile(fileName))
        {
            input.CopyTo(output);
        }
    }
}

在您的编辑中,您已经显示了首先保存到FileStream的代码,然后从当前位置复制流。正如您在注释中所指出的,您需要先倒带。

我个人不会在这里使用FileStream -为什么你想把它保存为一个正常的文件一个孤立的文件?只需使用MemoryStream:

using (var stream = new MemoryStream())
{
    await blob.DownloadToStreamAsync(filestream);
    stream.Position = 0;
    SaveToIsolatedStorage(stream, filename);
}

(注意你的SaveToIsolatedStorage方法仍然是同步的…您可能希望考虑异步版本。)