2

アプリケーションで使用中のファイルを Windows でユーザーが削除できるようにすることはできますか?

私のシナリオでは、アプリケーションによって監視される「クイック追加」ディレクトリがあります。新しい画像が表示されると、新しいスライドが作成され、自動スライド ショーで表示されます。また、ユーザーが「クイック追加」ディレクトリからファイルを削除 (および/または名前変更) し、スライド ショーから削除できるようにしたいと考えています。

アプリケーションがファイルを使用している間にファイルを削除してもよいことを Windows に通知するファイルにフラグを付ける方法はありますか?

4

2 に答える 2

5

アプリケーションがファイルを使用している間にファイルを削除してもよいことを 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 つのフラグを渡すことは残念です。

于 2013-01-19T00:58:01.123 に答える
0

Delete()ファイルを使用している Control に対してまたはメソッドを呼び出す場合Rename()は、ファイルを削除または名前変更する前に、PictureBox から削除できます。

複数回実行しても問題はありません。Control に Checkbox を使用すると、各 Control をチェックしてそのプロパティが true かどうかを確認し、適切なメソッドを呼び出すだけです。

于 2013-01-19T00:53:13.307 に答える