私はMicrosoftが、私はこれを使用してに実行しています問題は、ファイルのコピーが終了したら、それは日付変更された値を保持していないということです問題非同期
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
の中でメソッドを同期的にコピーするように変更すると、意図したとおりに動作しているようですが、それが正しい方法であるかどうかはわかりません。
"残念ながら、File.SetLastWriteTimeメソッドは、reader.CopyToAsync(writer)が待機する直前に実行されるようです。"本気ですか?あなたはそれを言うためにどのようなシステムのふるまいを経験していますか? –
_ "File.SetLastWriteTimeメソッドがreader.CopyToAsyncが終了するまで実行されないようにするにはどうすればよいですか?"だから問題がある場合は、あなたが投稿しなかったコードにある可能性が高いです。あなたの質問には、問題を確実に再現する良い[mcve]が含まれている必要があります。あるいは、 'File.Copy()'メソッド( 'Task.Run()'を使って非同期動作をさせる)を試してみてください。 –
別のプロセスで使用されていたため、ファイルに時刻を設定できないというメッセージが表示されます。 – Ambidex