【发布时间】:2016-01-26 22:59:35
【问题描述】:
我仍在学习读/写文件流的技巧,如果我正在寻找的是可行的,希望有人能提供帮助。
下面的代码调用 WebApi(注意第 2 行的 GetAsync())来获取图像文件 ID,并使用计算的 Md5Hash 将下载的文件保存到数据库。该代码工作正常,但为了提高效率,我想知道是否有可能从file.OpenStreamForWriteAsync() 获得file.OpenStreamForReadAsync()(不确定是否可行,但我可以看到一些在流上运行但没有运气的扩展方法到目前为止我所做的尝试)。如果可能的话,我可以避免保存文件并再次打开它,而是在 using (var fileStream = await file.OpenStreamForWriteAsync()){ ... } 块中调用 GetMD5Hash() 方法。
我可以在using 块之外,在块内部,在下面显示Utils.GetMD5Hash(stream); 的等价物,目的是避免在using 块之外打开文件吗?
var client = new HttpClient();
var response = await client.GetAsync(new Uri($"{url}{imageId}")); // call to WebApi; url and imageId defined earlier
if (response.IsSuccessStatusCode)
{
using (var contentStream = await response.Content.ReadAsInputStreamAsync())
{
var stream = contentStream.AsStreamForRead();
var file = await imagesFolder.CreateFileAsync(imageFileName, CreationCollisionOption.ReplaceExisting);
using (var fileStream = await file.OpenStreamForWriteAsync())
{
await stream.CopyToAsync(fileStream, 4096);
// >>>> At this point, from the Write fileStream, can I get the equivalent of file.OpenStreamForReadAsync() ??
}
var stream = await file.OpenStreamForReadAsync();
string md5Hash = await Utils.GetMD5Hash(stream);
await AddImageToDataBase(file, md5Hash);
}
}
【问题讨论】:
标签: c# windows-runtime uwp storagefile