2

私は C# .NET を使用しており、対 2008 では .net 3.5

私にとっては難しいですが、これには C# のサンプル コードが必要です。

  1. IOException のエラー コードを取得する方法 「別のプロセスによって使用されているため、プロセスはファイル 'XYZ' にアクセスできません。」

たとえば、私の問題では。

ファイルを削除しようとすると、「別のプロセスで使用されているため、プロセスはファイル 'XYZ' にアクセスできません。」というメッセージが表示されます。例外。

try
{
    File.Delete(infoFichero.Ruta);
}
catch (IOException ex)
{
    // ex.Message == "The process cannot access the file 'XYZ' because it is being used by another process."
}

しかし、.NET がスペイン語の場合、「El proceso no puede obtener acceso al archivo '00000004.PDF' porque está siendo utilizado en otro proceso」というメッセージが表示されます。

System.IO.IOException: El proceso no puede obtener acceso al archivo '00000004.PDF' porque está siendo utilizado en otro proceso.
   en System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   en System.IO.FileInfo.Delete()

その例外のエラーコードが必要です。トレースでは、System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) を見ました

IOException のエラー コードを取得する方法 「別のプロセスによって使用されているため、プロセスはファイル 'XYZ' にアクセスできません。」

4

4 に答える 4

10

HResult プロパティにアクセスできないことに気付いたかもしれません。回避策は、Marshal.GetLastWin32Error() メソッドを使用してネイティブ Windows エラー コードを取得することです。このような:

        catch (IOException ex) {
            int err = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
            if (err == 32) Console.WriteLine("It's locked");
            // etc..
        }

エラー コード 32 は、SDK では ERROR_SHARING_VIOLATION という名前です。

于 2010-07-15T20:16:14.897 に答える
1

エラー コードを含む (IO-)ExceptionのHResultプロパティがあります。このリストによると、例外のエラー コードは 0x20 である必要があります (ただし、試していません)。それが役立つことを願っています。

于 2010-07-15T19:45:29.977 に答える
0

(これは単なる拡張コメントであるため、CW とマークされています)

なぜエラーコードが必要なのですか?

  • あるコードと別のコードに基づいて異なるアクションを実行しますか?
  • Windows または .NET が変更され、同じ問題に対して突然別のエラー コードが返された場合はどうしますか?
  • 別の理由で同じファイルを削除できない場合、どうしますか? 実際、おそらくあなたの新しい問題はIOException.
于 2010-07-15T19:59:18.807 に答える
-1

HRESULTIOException クラスのプロパティを見てください。これにより、操作の Win32 HRESULT が返されるはずです (これを探していると思いますか?)。

于 2010-07-15T19:45:06.397 に答える