进程无法访问文件“XYZ”的错误代码因为它正在被另一个进程使用

发布于 2024-09-10 01:54:36 字数 986 浏览 10 评论 0原文

我使用 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."
}

但如果 .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',因为它正在被另一个进程使用。”

I using C# .NET , vs 2008 , .net 3.5

For me, is difficult, but I need sample code in C# for this:

  1. How get the error code of IOException "The process cannot access the file 'XYZ' because it is being used by another process."

For example, in my issue.

I try delete file, and I get "The process cannot access the file 'XYZ' because it is being used by another process." Exception.

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."
}

But if .NET is Spanish, I get "El proceso no puede obtener acceso al archivo '00000004.PDF' porque está siendo utilizado en otro proceso" message.

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

I need a ERROR CODE for that Exception. In Trace, I have seen System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

How get the error code of IOException "The process cannot access the file 'XYZ' because it is being used by another process."

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

微暖i 2024-09-17 01:54:36

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

You might have noticed that the HResult property is not accessible. The workaround is to use the Marshal.GetLastWin32Error() method to get the native Windows error code. Like this:

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

Error code 32 is named ERROR_SHARING_VIOLATION in the SDK.

千纸鹤带着心事 2024-09-17 01:54:36

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

there's an HResult property on (IO-)Exception that contains an error code. According to this list the error code for your exception should be 0x20 (I didn't try that though). Hope that helps.

且行且努力 2024-09-17 01:54:36

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

为什么需要错误代码?

  • 您是否打算根据一个代码与另一个代码采取不同的操作?
  • 如果 Windows 或 .NET 发生更改,导致同一问题突然收到不同的错误代码,您会怎么做?
  • 如果您无法删除同一个文件,但由于不同的原因,您想做什么?事实上,也许您的新问题甚至不会抛出 IOException。

(marked CW because this is really just an extended comment)

Why do you need the error code?

  • Are you going to take a different action based on one code versus another code?
  • What will you do if Windows or .NET changes, so that you're suddenly getting a different error code back for the same problem?
  • What do you want to do if you can't delete the same file, but for a different reason? In fact, maybe your new problem won't even throw an IOException.
酷到爆炸 2024-09-17 01:54:36

Have a look at the HRESULT property of the IOException class. This should return the Win32 HRESULT of the operation (which is what I think you're looking for?).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文