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()

我需要该异常的错误代码。在 Trace 中,我看到了 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 回答