2010-02-11 24 views
2

我有一個文件,我想以編程方式關閉該文件,由另一個進程使用。我想關閉一個文件

事情是我想從另一個進程中,無論使用哪一個,然後刪除它的文件釋放..無論如何要做到這一點編程? 我正在使用c#..

如何刪除此?

我已經做了這樣的代碼,

如果(File.Exists(文件路徑)) File.Delete(文件路徑);

刪除文件

+0

相關:http://stackoverflow.com/questions/1977611/is-it-possible-to-bypass-a-file-lock-in-c-when-another-thread-process-is- unecess – 2010-02-11 12:57:21

回答

2

嘗試this

儘管我不會推薦關閉其他進程的句柄,除非你真的知道這樣做的後果!

3

我不確定這是一個好主意......這取決於「其他」應用程序對文件做了什麼以及它是否會對系統或數據穩定性/完整性產生任何影響。

話雖如此,你也許可以通過脫殼到Sysinternals Handle之類的東西來獲得所需的功能,以獲取其他程序的身份並強制它通過任何必要的方式釋放該文件。

不過,我的首選選項是進入等待循環,直到文件被其他應用程序釋放,然後將其刪除。雖然這只是我。

- EDIT-- 如果有問題的文件在網絡共享上,這個想法會變得更加複雜 - 在這種情況下,您不知道哪個進程正在鎖定文件,因爲它可能不在您的計算機上。 (實際上,我不確定各種文件共享鎖文件如何使用 - 更復雜;))

1

您可能沒有權利這樣做,無論如何,您將得到一個異常拋出由你的代碼示例。以編程方式,在C#下,將會有很多pinvokes來獲取安全證書,並允許程序從另一個進程中掃描文件,使用進程注入來將進程自己的死手指從文件中解脫出來 - 這又回到了這個問題 - 爲什麼無論如何,你是否想要這樣做到另一個進程?

如果您不說我會說這是非常可疑的...您可能會在該進程中導致程序損壞(可能因爲他們自己的原因使用它),如果您嘗試過,最終會失敗,因爲該資源不再存在...

希望這會有所幫助, 最好的問候, 湯姆。

0

如果你的文件是文本文件,那麼你不需要刪除你的文件(退出代碼的過程是一個壞主意),而是你可以讓你的文本文件爲空。

if (File.Exists(filePath)){ 
    File.WriteAllText(filePath, String.Empty); 
}