2010-07-15 80 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

相關問題