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文件到独立存储而不使它损坏吗?
您正在使用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
方法仍然是同步的…您可能希望考虑异步版本。)