C# 将IO.Stream写入(读取)ApplicationData.Current.LocalFolder
将amnd write和IO.Stream(我的例子中是从internet下载的Zip文件)读取到ApplicationData.Current.LocalFolder的最佳方式是什么 我试过了C# 将IO.Stream写入(读取)ApplicationData.Current.LocalFolder,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,将amnd write和IO.Stream(我的例子中是从internet下载的Zip文件)读取到ApplicationData.Current.LocalFolder的最佳方式是什么 我试过了 public static async Task WriteToFile( this System.IO.Stream input, string fileName, StorageFolder folder = null) { fold
public static async Task WriteToFile(
this System.IO.Stream input,
string fileName,
StorageFolder folder = null)
{
folder = folder ?? ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(
fileName,
CreationCollisionOption.ReplaceExisting);
using (var fs = await file.OpenAsync(FileAccessMode.ReadWrite))
{
using (var outStream = fs.GetOutputStreamAt(0))
{
using (var dataWriter = new DataWriter(outStream))
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
{
dataWriter.WriteBytes(buffer);
}
await dataWriter.StoreAsync();
dataWriter.DetachStream();
}
await outStream.FlushAsync();
}
}
}
写作及
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
var fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
var stream = fileStream.AsStreamForRead();
但是文件在某个地方被破坏了,我不认为在读的时候有问题,所以应该在写文件的时候。是否有更好的方法将IO.Stream写入到ApplicationData.Current.LocalFolder中,这样做更有效?尝试以下方法:
static async void DownloadFileAsync(
this HttpClient httpClient,
string requestUri,
string fileName,
StorageFolder folder = null)
{
folder = folder ?? ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync(
fileName, CreationCollisionOption.ReplaceExisting);
using (var httpStream = await httpClient.GetStreamAsync(uri))
using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
await httpStream.CopyToAsync(fileStream.AsStreamForWrite());
}
}
MSDN:,。为什么这里有这么多异步?@AndrewBarber因为这是WinRT中的新方法?@AndrewBarber可能需要50毫秒以上的每个操作都必须异步完成