私はこれがまったく些細なことだと思っていましたが、頭痛がありました。私は排他的アクセス権を持っていることを確認するためにファイルを開いて、特定の条件をテストしてから削除したいと思います。ファイルを正しく開くためにはどうすればよいですか?
今私は99%のアプローチを使用しています:
FileStream s = null;
try {
s = new FileStream (
path,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.None);
// some stuff about the file is checked here
s.Dispose();
// hope the file is not accessed by someone else...
File.Delete (path);
return true;
}
catch (IOException) {
if (s !=null) s.Dispose();
return false;
}
をこの通常動作しますが、私は縁の条件を回避し、より良い方法があるはずと考えました。
削除チェックフラグ(既に設定されている削除フラグを使用して開いた後に発生する)がファイルを削除しないことを示す可能性があるため、DeleteOnCloseフラグを指定してファイルを開くと機能しません。
これは役に立ちますが、codeplexの[トランザクションファイルマネージャ](http://transactionalfilemgr.codeplex.com/)プロジェクトを見てきましたか? – Oded
ストリームを破棄する前にFileShare.Deleteでファイルを開き、File.Deleteを呼び出そうとしましたか? – Fox32
実際には何が問題ですか? File.Deleteと同じ方法で、ファイルがすでにロックされている(または他の誰かによって削除されている)場合、最初のオープンはIOExceptionをスローできます。あなたは例外を捕まえて処理するので、どこが問題になるのですか? – Eddy