代码之家  ›  专栏  ›  技术社区  ›  Kiquenet user385990

进程的错误代码无法访问文件“xyz”,因为其他进程正在使用该文件

  •  2
  • Kiquenet user385990  · 技术社区  · 15 年前

    我使用C.NET,与2008年相比,.NET 3.5

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

    1. How get the error code of 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 aceso al archivo'0000000 4.pdf”的消息。

    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.\u error.winioerror(int32错误代码,string mayboullpath)

    How get the error code of ioexception“进程无法访问文件'xyz',因为它正被另一个进程使用。”

    4 回复  |  直到 8 年前
        1
  •  9
  •   Hans Passant    15 年前

    您可能已经注意到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中被命名为“错误\共享\冲突”。

        2
  •  1
  •   John Saunders    15 年前

    (标记为cw,因为这实际上只是一个扩展注释)

    为什么需要错误代码?

    • 您打算根据一个代码和另一个代码采取不同的操作吗?
    • 如果Windows或.NET发生更改,从而突然为同一个问题返回不同的错误代码,您会怎么做?
    • 如果不能删除同一个文件,但原因不同,您想做什么?事实上,也许你的新问题甚至不会 IOException .
        3
  •  0
  •   andyp    15 年前

    有一个 HResult 包含错误代码的(IO-)异常的属性。根据这个 list 您的异常的错误代码应该是0x20(不过我没有尝试过)。希望有帮助。

        4
  •  -1
  •   CodingGorilla    15 年前

    看看 HRESULT IOException类的属性。这将返回操作的win32-hresult(我认为您要查找的是哪个?).