0
我異步複製文件與微軟提供的https://docs.microsoft.com/en-us/dotnet/standard/io/asynchronous-file-i-o問題與文件複製異步
我遇到使用此問題是,當文件完成複製後,它不會保留修改日期有價值物品和設置爲創建文件的時間。
爲了彌補這一點,我試圖設置每個文件完成複製後的日期修改時間,使用靜態方法File.SetLastWriteTime
。
foreach (var file in dir.EnumerateFiles())
{
string temppath = Path.Combine(destDirName, file.Name);
using (FileStream reader = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
{
using (FileStream writer = new FileStream(temppath, FileMode.Create, FileAccess.ReadWrite))
{
await reader.CopyToAsync(writer);
File.SetLastWriteTime(temppath, file.LastWriteTime);
}
}
}
遺憾的是,似乎之前await reader.CopyToAsync(writer)
已完成File.SetLastWriteTime
方法立即執行。
如何確保在reader.CopyToAsync
完成後才能執行File.SetLastWriteTime
方法?
如果我更改方法在Task.Run
內同步複製,但它不能確定這是否是正確的方法。
「不幸的是,似乎在等待reader.CopyToAsync(writer)完成之前,File.SetLastWriteTime方法立即執行。」你確定?你經歷過什麼樣的系統行爲導致你這麼說? –
_「如何才能確保File.SetLastWriteTime方法不會在reader.CopyToAsync完成後才執行?」 - 您發佈的代碼會執行此操作。所以,如果你有問題,那很可能是你沒有發佈的代碼。你的問題應該包括一個可靠地再現問題的良好[mcve]。或者,也許你應該嘗試'File.Copy()'方法(使用'Task.Run()'運行它以獲得異步行爲)。 –
我收到一條消息,指出它無法在文件上設置時間,因爲它正在被另一個進程使用。 – Ambidex