2011-06-27 63 views
1

我知道有幾十個關於「正被另一個進程使用的文件」的問題。但是他們都有嘗試讀取文件或寫入已被另一個進程使用的文件的問題。我只想檢查一個文件是否被另一個進程使用(之後沒有IO動作)。 我在別處找不到答案。 那麼,如何知道C#中的另一個進程是否正在使用某個文件或文件夾呢?如何知道另一個進程是否正在使用某個文件的文件夾?

+0

的可能的複製[?如何檢查文件鎖定(http://stackoverflow.com/questions/1304/how-to-check-for-file-鎖) –

回答

3

正如你在問題中所描述的,唯一的方法是先嚐試打開文件,看看它是否被另一個進程使用。

你可以用這個方法我較早前實施的想法是,如果該文件存在,那麼嘗試打開該文件作爲開寫,所以如果失敗則該文件可能是由另一個進程使用:

public static bool IsFileInUse(string fileFullPath, bool throwIfNotExists) 
{ 
    if (System.IO.File.Exists(fileFullPath)) 
    { 
     try 
     { 
      //if this does not throw exception then the file is not use by another program 
      using (FileStream fileStream = File.OpenWrite(fileFullPath)) 
      { 
       if (fileStream == null) 
        return true; 
      } 
      return false; 
     } 
     catch 
     { 
      return true; 
     } 
    } 
    else if (!throwIfNotExists) 
    { 
     return true; 
    } 
    else 
    { 
     throw new FileNotFoundException("Specified path is not exsists", fileFullPath); 
    } 
} 
+0

這是一個好方法,謝謝。但最簡單的方式,幾乎每個人都首先想到它。我只是想看看是否有任何規範的方式來在.NET中做到這一點。但非常感謝你的幫助。 –

+0

歡迎您:) –

+0

好吧,當我查看其他線程時,似乎唯一的方法是嘗試在try catch塊中打開文件,並檢查異常類型以查看它是否被鎖定。 –

相關問題