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