• 締切済み

C# ファイル削除のエラーコード

言語:C# の質問です。(初心者 初めて1週間)  ファイルの削除を行った際に、別プロセスが使用中で、 削除できなかった場合に対して、別処理を行いたいです。  ファイルが削除できない場合は、エラーを取得することができるのですが、  別プロセスが使用中のみの制御を入れたいと思っています。  VB6では、ファイル削除(Kill)ができなかった場合に、 エラーコードを返して、該当するエラーコードのみに 別処理を行うことができていました。  それと同じことを、C#でも行いたいです。 処理としては、 1.ファイルの削除を行う 2.ファイルの削除が出来なかった場合に対してのみ、  別処理を入れる  (別プロセスが使用中のため削除できないファイルに対して)  このような処理を行いたいのですが、 ファイルが削除できなかった場合の、エラーコードを 求め方を色々調べてみたのですが、見つかりません。 下記ソースで、プログラムを作成中です。 try{    System.IO.File.Delete(@削除するファイル名); } cach(System.IO.IOException) {   //ここでエラーコードを取得し、該当するエラーコードのみに   //対して、別処理を入れたい   MessageBox.Show(err.Message); }   MessageBox.Show(err.Message);   ↑   もし、エラーコードが取得できないのであれば、  このエラーメッセージ文章に対してリテラルで制御をいれる  ことも考えています。 どうか、ご教授ください。 よろしくお願いいたします。

みんなの回答

  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.3

あぁ、つまらないミスが・・・ if(errNum = (int)Win32Error.SharingViolation)              ↓ if(errNum == (int)Win32Error.SharingViolation) Visual Studio(Expressを除く)を使用しているのであれば、マイクロソフトがソースコードを公開しているので、ブレークポイントを仕掛けてロック時にどのようにIOExceptionがthrowされているのか追跡することもできるかと思います。 やり方は下記URLに解説されています。 http://www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html .NET Reflectorでもソースコードを確認できますが、ライセンス違反になるので。

  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.2

VB6はよく知りませんがGetLastError API相当でいいのであればMarshal.GetLastWin32Errorで判別できるのではないでしょうか? enum Win32Error {   SharingViolation = 0x00000020, } int errNum = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); if(errNum = (int)Win32Error.SharingViolation) {   //ロックがかかっていた場合の処理。 } 当然ですがGetLastWin32Errorを実行するまでに別のエラーが発生した場合は上書きされてしまうので取得できません。

  • Gab_km
  • ベストアンサー率40% (20/50)
回答No.1

IOExceptionにエラーコードのプロパティはありません。 ただ、IOExceptionのMessageプロパティが、プロセス排他の場合に次のようになります: "別のプロセスで使用されているため、プロセスはファイル '(ファイル名が入ります)' にアクセスできません。" ここは2番目のアイディアである、メッセージを引っかけるやり方で対応されてはいかがでしょうか。