errorCode for进程无法访问文件'XYZ',因为它正被另一个进程使用

时间:2010-07-15 19:39:28

标签: c# file ioexception error-code delete-file

我使用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 obtener acceso alarchivo'00000004.PDF'polqueestásiendoutilizado 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 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

(标记为CW,因为这实际上只是一个扩展评论)

为什么需要错误代码?

  • 您打算根据一个代码与另一个代码采取不同的操作吗?
  • 如果Windows或.NET发生变化,您将采取什么措施,以便突然针对同一问题获得不同的错误代码?
  • 如果你不能删除同一个文件,但是出于不同的原因,你想做什么?事实上,也许你的新问题甚至不会抛出IOException

答案 2 :(得分:0)

在(IO-)Exception上有一个HResult属性,其中包含错误代码。根据这个list,你的异常的错误代码应该是0x20(虽然我没试过)。希望有所帮助。

答案 3 :(得分:-1)

查看IOException类的HRESULT属性。这应该返回操作的Win32 HRESULT(这是我认为你正在寻找的?)。