2010-07-15 81 views
2

我使用C#.NET正在被另一个过程中,VS 2008,.NET 3.5的errorCode的进程无法访问文件“XYZ”,因为它是

对于我来说,是困难的,但我需要在代码示例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是西班牙人,我得到 “厄尔尼诺proceso没有puede obtener acceso人档案馆 '00000004.PDF' porque ESTA siendo utilizado恩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 .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)

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

+1

@John,常见问题解答并没有说离开Hellos和Thankses ..有礼貌不花钱任何东西,不能相信它会是除了体贴之外的任何东西吗? – 2010-07-15 20:31:08

+1

@Kieren:看到[应该'嗨','谢谢'和标语和致敬从帖子中删除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-and-taglines-and -salutations被移除的从 - 职位)。 – 2010-07-15 21:05:25

回答

8

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

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

+0

这是受保护的,所以不能没有反射访问? – 2012-07-08 23:15:45

+0

@AlexAngas无法通过代码访问,但仍然可以通过调试器对其进行检查。 – CodingGorilla 2012-07-16 17:49:22

0

在包含错误代码的(IO-)异常上有HResult属性。根据这list你的异常的错误代码应该是0x20(尽管我没有尝试)。希望有所帮助。

+0

这是受保护的,所以不能没有反射访问? – 2012-07-08 23:16:01

1

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

为什么你需要错误代码?

  • 你打算根据一个代码和另一个代码采取不同的操作吗?
  • 如果Windows或.NET发生更改,您会怎么做,以便您为相同问题突然获得不同的错误代码?
  • 如果您不能删除相同的文件,但出于不同的原因,您想要执行什么操作?事实上,也许你的新问题甚至不会抛出一个IOException
+0

我需要代码来识别错误,我想获取进程的名称(它正在被另一个进程使用)。 – Kiquenet 2010-12-09 18:59:54

+0

您不应该有任何需要“识别错误”。你将如何处理这些信息?此外,您永远不会知道哪个进程打开了该文件。 Windows不提供该信息。请告诉我们你需要什么来完成,也许我们可以提供帮助。 – 2010-12-09 22:17:01

+0

我想识别错误。如果因为另一个进程使用它而无法删除文件,我希望能够获取使用该文件的进程的名称,并向应用程序的用户发出警告(或发送邮件)。我的Windows服务移动,删除大量文件,并且我需要完全控制所有文件和进程。 – Kiquenet 2010-12-22 09:46:24

相关问题