2011-03-18 16 views
0

我有一些代碼,我每次程序通過此點運行時寫給基本明確了該目錄。我不想打擾枚舉文件。如果這是一個不好的方法,請告訴我。間歇性「文件正在使用」錯誤

我的主要問題,然而,是關於如何處理以下內容:文件夾中的文件之一似乎是在使用的時候它肯定不是。該程序在ButtonClick事件上運行,它在前四五次爆炸,但在確認沒有人在服務器上使用該文件後,該程序運行。除了我自己以外,只有一個人會使用它,並且他確認他身邊沒有任何東西會碰到文件。任何想法會導致這個錯誤/如何避免它/如何處理它?

我也有麻煩重現錯誤...

string directory = @"\\server\directory\folder\"; 
    DirectoryInfo di = new DirectoryInfo(directory); 

    if (di.Exists) 
     di.Delete(true); 

    Directory.CreateDirectory(directory); 
+0

我認爲你必須刪除 – Robert 2011-03-18 12:28:24

+1

可能有人在使用文件,並沒有處置的FileStream基礎文件。然後,一旦GC收集FileStream,文件就變得可用。 – CodesInChaos 2011-03-18 12:28:32

+1

殺毒軟件可以是一個痛苦這裏,雖然很難說,因爲樣品上面並沒有觸及任何文件... – 2011-03-18 12:33:32

回答

1

如果您使用的是Windows XP,這可能會幫助:http://msdn.microsoft.com/en-us/library/dd997370.aspx#remove_open_handles

只是一個提取此網頁的頂部: 「如果你運行的是Windows XP或更早版本,對文件或目錄的刪除操作是如果枚舉的目錄或文件中有一個打開的句柄仍然存在,枚舉可能會失敗。「

你也可以使用一個軟件像Unlocker識別過程中鎖定您的文件。

+0

我知道這需要一些時間,但最終成爲問題的根源。謝謝。 – SeanVDH 2011-03-30 16:24:18

1

如果該文件正在使用,這時有人肯定是使用它。 :)

如果您可以訪問這些文件駐留在服務器上,你可以使用一個工具,如Process Explorer找出哪個進程打開的文件。

+0

除了沒有人。可能一直使用它的過程並沒有開始,因爲這部分失敗了,在我自己身邊只有一個人會這樣做。我與他覈對,他證實他既沒有開始下一個過程,也沒有觸及文件。這也不能解釋爲什麼這是間歇性的。 – SeanVDH 2011-03-18 12:31:16

+0

@SeanVDH再次,如果Windows報告該文件正在使用中,那麼它正在使用中。通過Process Explorer檢查誰在使用它,並從那裏處理問題。 – 2011-03-18 12:33:01

+0

[Process Monitor](http://technet.microsoft.com/en-gb/sysinternals/bb896645)在這種情況下會更好 - 允許記錄所有訪問。也許很難在Process Explorer中看到瞬態訪問。 – Richard 2011-03-18 12:41:09