- 締切済み
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); ↑ もし、エラーコードが取得できないのであれば、 このエラーメッセージ文章に対してリテラルで制御をいれる ことも考えています。 どうか、ご教授ください。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hofuhofu
- ベストアンサー率70% (336/476)
あぁ、つまらないミスが・・・ 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)
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)
IOExceptionにエラーコードのプロパティはありません。 ただ、IOExceptionのMessageプロパティが、プロセス排他の場合に次のようになります: "別のプロセスで使用されているため、プロセスはファイル '(ファイル名が入ります)' にアクセスできません。" ここは2番目のアイディアである、メッセージを引っかけるやり方で対応されてはいかがでしょうか。