ターゲットOS:Win2003
ファイル操作のアトミック性に関する他のSOの質問に投稿されているように、Win32は単にトランザクション用に設計されていません。それでも、ファイルの削除が非アトミックである可能性があるのではないかと思います。結局のところ、それは削除されるかどうかのどちらかです。または、削除中にシステムクラッシュなどが原因で、ファイルがNTFSファイルシステム上の他の中間状態のままになる可能性がありますか?
ターゲットOS:Win2003
ファイル操作のアトミック性に関する他のSOの質問に投稿されているように、Win32は単にトランザクション用に設計されていません。それでも、ファイルの削除が非アトミックである可能性があるのではないかと思います。結局のところ、それは削除されるかどうかのどちらかです。または、削除中にシステムクラッシュなどが原因で、ファイルがNTFSファイルシステム上の他の中間状態のままになる可能性がありますか?
NTFSは、ジャーナル化されたファイルシステムです。ジャーナルは基本的にデータベースのトランザクションログに相当します。データベースがテーブルに対して行うように、ファイルシステム構造の一貫性と整合性を保証します。File.Delete
高レベルのトランザクションコードはありませんが、NTFSはファイルシステムレベルでトランザクションの整合性を維持します。これは、他のファイルシステムドライバには当てはまらない場合があります。
古い質問ですが、少し異なる観点から、@Mehdradの回答に追加できれば...
Windowsでは、ファイルの削除は完全に同期していないことが多く、単一の操作でもありません。その意味では、それは間違いなくアトミックではありません。
プロセスモニターなどのツールを調べたり、ファイルシステムドライバーを作成するためのMSFTドキュメントを調べたりすると、Windowsでファイルを削除するのは複数のステップからなるプロセスであることがわかります。まず、ファイルへのハンドルが必要です。次に、その配置を「削除済み」に設定します。これにより、ファイルは「削除保留中」の状態になります。ファイルの最後のハンドルが閉じられるまで、ファイルはビューから削除されません。ファイルがこの状態にある場合、ファイルを開くための新しい試行は。で失敗しSTATUS_DELETE_PENDING
ます。このステータスは、実行時のものです。プラグを抜いたり、再起動したりすると、ファイルはその状態のままになりません。
したがって、削除の使用方法に関連する場合と関連しない場合がありますが、Windowsでは削除がすぐに有効になる必要はなく、同時アクセス下では、アクセスできないようにそれ以上の要求がロックされる可能性があることに注意してください。ファイル。