5

私のアプリケーションでは、フォルダーの名前を変更しようとしていますが、Windows エクスプローラーでフォルダーを開くと、IOException. C# の Windows エクスプローラーでフォルダーが開かれているかどうかを特定するにはどうすればよいですか?

4

3 に答える 3

8

IOExceptionをキャッチしますか?

他の人が言っているように、あなたがやりたいことをやってみて、それが起こったら例外を捕まえて、あなたの文脈にあるものは何でも、適切な行動をとってください。

私が見ているように、あなたは本当に多くの選択肢を持っていません、考えてみてください:

bool iHaveAccess = CheckAccess(folder);
if (iHaveAccess)
{
    RenameFolder(folder,newFolderName);
}

CheckAccessが成功してからRenameFolderを呼び出すまでの間に、他の何かがフォルダをロックした場合はどうなりますか?それなら何をするの?

于 2010-01-22T15:53:30.327 に答える
1

プログラムの名前を変更できないような方法でフォルダが開いているかどうかを判断するのは合理的ではありません。決定した直後に、別のプロセスがフォルダーの使用を開始または停止する可能性があるためです。代わりに、操作を実行して、結果の例外をキャッチします。

try {
  Directory.Move("old","new");
  return true;
} catch ( IOException ) {
  return false;
}
于 2010-01-22T15:56:02.690 に答える
0

少し検索した後、この投稿この投稿を見つけました。どのプロセスがファイルをロックしているかをプログラムで判断する方法のさまざまなテクニックを示しています。それらの1つで、エクスプローラーがフォルダーをロックしているかどうかを確認できるはずです。

于 2010-01-24T16:56:57.400 に答える