2012-09-03 96 views
0

可能重複:
Is there a way to check if a file is in use?FileStream:如何檢查文件是否準備好,未使用?

我看到有一個很簡單的方法來檢查文件被解鎖,不被另一個進程使用:

public static bool Check(string filepath) 
{ 
    try 
    { 
    using (File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.None)) {} 
    } 
    catch (Exception e) 
    { 
    log("file not ready" + e); 
    return false; 
    } 
    return true; 
} 

好這很好,但是如何檢查Method是否會使用FileStream作爲參數?

public static bool Check(FileStream f) 
{ 
//... 

有什麼建議嗎?謝謝

+2

看看http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use – coolmine

+0

@CooLMinE多數民衆贊成在一個很好的線程。但他們都使用字符串到完整路徑或FileInfo。我只有FileStream。 – miri

+0

你需要什麼是不可能的。除非您發送空FileStream作爲參數並在Check方法中初始化它。通過在將它發送給Check方法之前對其進行初始化,這意味着您已經檢查了在將文件作爲參數發送之前是否可以訪問該文件。 – coolmine

回答

2

我想這取決於你的目標,但檢查這可能不是我能想象的大多數應用程序的正確路徑。

我猜你想檢查這個,以便你可以檢查,如果不使用,去做一些事情(即檢查然後寫一行代碼)。這裏面臨的挑戰是,中間有人可能會走過來接收文件,導致您在嘗試操作中失敗。

一般來說,我會說只是試圖做任何你想做的事情,並在那裏發現失敗。無論如何,你需要防守編碼並假設這一點。額外的檢查很少達到很多。

+1

那就對了。如果文件準備就緒,我會用它做一些事情。如果Check()=> true,我可以鎖定文件;)這將解決問題。但我仍然不知道如何做到這一點只與FileStream – miri

+2

不要檢查。試着去做你真正想做的事。如果失敗,請查看錯誤並在該代碼路徑中處理它。 (當您嘗試執行實際操作時,IE會查找由於其他人處理文件而導致失敗) –

相關問題