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

Kiq*_*net 2 c# file error-code ioexception delete-file

我使用C#.NET,vs 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."
}
Run Code Online (Sandbox Code Playgroud)

但如果.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()
Run Code Online (Sandbox Code Playgroud)

我需要一个错误代码用于该异常.在Trace中,我见过System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)

如何获取IOException的错误代码"进程无法访问文件'XYZ',因为它正由另一个进程使用."

Han*_*ant 9

您可能已经注意到HResult属性不可访问.解决方法是使用Marshal.GetLastWin32Error()方法获取本机Windows错误代码.像这样:

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

错误代码32在SDK中命名为ERROR_SHARING_VIOLATION.