我仍在学习读/写文件流的技巧,如果我正在寻找的是可行的,希望有人能提供帮助。
下面的代码进行 WebApi 调用(GetAsync()
第 2 行的注释)以获取图像文件 Id 并将下载的文件保存到具有计算的 Md5Hash 的数据库中。代码工作正常,但为了提高效率,我想知道是否可以从中获取file.OpenStreamForReadAsync()
(file.OpenStreamForWriteAsync()
不确定是否可行,但我可以看到一些在流上运行的扩展方法,但我尝试过的却没有运气至今)。如果这是可能的,我可以避免保存文件并再次打开它,而是在using (var fileStream = await file.OpenStreamForWriteAsync()){ ... }
块内调用 GetMD5Hash() 方法。
我可以在块Utils.GetMD5Hash(stream);
外,块内有如下所示的等价物,using
目的是避免在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);
}
}