我使用C#.NET,VS 2008,.NET 3.5

对我来说,很难,但我需要C#中的示例代码:

  1. 如何获得IoException的错误代码“此过程无法访问文件”XYZ“,因为它被另一个进程使用。”
  2. 例如,在我的问题中。

    我尝试删除文件,我得到“该进程无法访问文件'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 obener acceso al Archivo' 00000004.pdf'porquo esiendo ultizado 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 .__错误.winioError(Int32 ErrarCode,String solyfullpath)

    如何获得IoException的错误代码“该进程无法访问文件”XYZ“,因为它被另一个进程使用。”

有帮助吗?

解决方案

您可能已经注意到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。

其他提示

有一个 hresult 属性(IO - )包含错误代码的异常。根据这个 list 您的例外的错误代码应该是0x20(我没有尽管如此。希望有所帮助。

(标记CW,因为这真的只是一个扩展的评论)

为什么您需要错误代码?

  • 您是否将根据一个代码与另一个代码进行不同的措施?
  • 如果Windows或.NET更改,您会做什么,这样您就突然收到不同的错误代码对于同一个问题?
  • 如果您无法删除相同的文件,但出于不同的原因,您想要做什么?事实上,也许你的新问题甚至不会抛出一个生成的。

看看 HRESULT 属性IoException类。这应该返回Win32 Hresult的操作(这就是我认为您正在寻找的?)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top