我正在使用Microsoft提供的文章this post
异步复制文件我遇到的问题是,当文件完成复制时,它不会保留日期修改值,并设置为文件创建的时间。
为了弥补这一点,我试图在使用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);
}
}
}
静态方法完成复制后为每个文件设置日期修改时间。
File.SetLastWriteTime
不幸的是,似乎await reader.CopyToAsync(writer)
方法在File.SetLastWriteTime
完成之前立即执行。
如何确保reader.CopyToAsync
方法在Task.Run
完成之后才会执行?
如果我将方法更改为在{{1}}内同步复制,但似乎无法确定这是否是正确的方法,它似乎按预期工作。
答案 0 :(得分:1)
我能够弄明白。
无法设置文件时间的原因是因为它仍在流中。
我只是将方法移到写入流之外,这解决了问题。
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);
}
}