アプリケーションがファイルを使用している間にファイルを削除してもよいことを Windows に通知するファイルにフラグを付ける方法はありますか?
はい。Win32 では、これは にdwShareMode
渡されCreateFile()
ます。これは、別のプロセスに許可したいことのビットフィールドです。あなたが探しているビットはFILE_SHARE_DELETE
、開いている間に削除または名前変更を許可するものです。ただし、最も礼儀正しい振る舞いとして、3 つすべてを含めることをお勧めしFILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE
ます。[1]
Win32ではなくC#について質問しているため、.NETの世界では、これらはFileShare
ファイルを開くときに渡すことができる列挙に含まれています。でFile.Open
。
これらのフラグでは、ファイルが名前で開かれている間、ファイルの親ディレクトリの名前を変更できないことに注意してください。カーネルの制限 (技術的には ntfs.sys IIRC) により、共有に関係なく失敗します。
脚注
1: 編集者のコメント: 渡す0
(多くの人が無意識に行っている) ことがたまたま最も許容度の低いオプションである、または Windows でコードを書いている多くの人々がこのパラメーターが何をするのかを理解せず、これら 3 つのフラグを渡すことは残念です。