我仍在學習讀/寫文件流的技巧,並希望有人能幫助,如果我正在尋找的是可行的。可以從file.OpenStreamForWriteAsync()獲取file.OpenStreamForReadAsync()嗎?
下面的代碼使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);
}
}
你把我放在正確的軌道上,謝謝。我發佈了一個完整的答案。 – user2921851