有沒有辦法可以檢查一個文件是否正在使用中,或者沒有被其他進程打開,而只是試圖打開它並捕獲異常?有沒有服務方法來測試這樣的事情?檢查文件是否正在使用而沒有嘗試捕獲?
回答
即使有,它也不會對你有太大的好處,因爲你仍然必須捕捉異常,以便處理在初始檢查和實際嘗試打開/訪問它。
我想不出有任何令人信服的優勢來進行初步的防守檢查。這隻會導致不必要的代碼重複。
如果有被這樣的IsFileAccessible
功能,它很可能是爲試圖打開該文件一個巨大的try/catch塊落實,抓失敗,並返回結果。
@CodyGray Thnx用於回答,但是這與檢查文件的訪問控制是否相同,可以在兩者之間進行更改,直到我訪問它爲止?但是我確實有這個選項來詢問這些訪問控制,而不必碰到catch語句,它仍然可以發生,但它不會成爲我計劃的一部分。 – CloudyMarble 2013-03-12 13:37:27
你是對的。但是,儘管最終你不能避免檢查異常,但是有一個函數可以檢查那些沒有必要打開文件的東西,這可能會很有趣。一些有用的工具可以提供這些信息,而且它們不基於try/catch代碼。 – 2013-03-12 13:37:33
@SimonMourier沒有嘗試/抓住就很容易做到。只需調用'CreateFile'。 – 2013-03-12 13:39:44
我可以測試一個文件是否可以打開而不打開 打開它?
.net框架就像下面的Windows API一樣,沒有提供這樣的功能。如果你想知道文件是否可以打開,你需要嘗試打開它並檢查失敗。
有趣的方式,以避免嘗試catch(但意味着試圖打開)是LockFile()或CreateFile()功能:
HANDLE WINAPI的CreateFile(...)
如果函數成功,返回值是指定文件,設備,命名管道或郵件插槽的打開句柄。
如果函數失敗,則返回值爲INVALID_HANDLE_VALUE。要獲得更多的錯誤信息,請致電GetLastError。
BOOL WINAPI與LockFile(...)
如果函數成功,返回值是非零 (TRUE)。
如果函數失敗,則返回值爲零(FALSE)。要獲得 擴展錯誤信息,請撥打GetLastError。
這鎖住調用進程獨佔訪問指定的文件,並在失敗錯誤信息寫入線程的最後一個錯誤,這可以使用GetLastError功能retreived。
在unlockFile和OpenFile之間另一個進程可以鎖定文件仍然是可以想象的,但它可以通過保持文件鎖定到它需要打開的時刻來縮短這個時間。
問問你自己hFile的來源? – 2013-03-13 08:28:38
你的權利!我以CreateFile結束,雖然它沒有拋出異常,並啓用readbale返回值,但它仍然嘗試打開文件 – CloudyMarble 2013-03-13 10:12:44
這正是我和其他人告訴你的。恰巧用於打開文件的.net機制發出異常信號失敗。 Win32機制通過返回值發出錯誤信號。從根本上講,它最終會得到同樣的結果。 – 2013-03-13 10:21:28
你可以在.net 4中實現這個人。5但它包含大量的開銷 http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
- 1. 檢查文件鎖定沒有嘗試捕獲
- 2. 檢查是否存在一個頁面,而無需使用嘗試捕捉
- 3. 高效地檢查COM屬性是否可用,而不需要嘗試/捕獲
- 4. 檢查文件是否被鎖定或捕獲嘗試打開的錯誤
- 5. 檢查文件是否正在使用
- 6. 有沒有辦法檢查文件是否在使用
- 7. 嘗試使用RAII捕獲?
- 8. 嘗試除非沒有捕獲錯誤
- 9. PHP PDO嘗試catch塊沒有捕獲
- 10. AS3檢查陣列中是否沒有對象正在測試
- 11. 檢查是否設置了BuiltInDocumentProperty沒有錯誤捕獲
- 12. 如何在嘗試刪除正在使用的文件時捕獲異常?
- 13. 檢查是否正在使用Seam對話,但沒有鎖定
- 14. 是否嘗試/捕獲比散列查找花費更少?
- 15. 使用沒有嘗試捕獲的事務
- 16. 檢查文件路徑是否正確,但不檢查文件是否存在
- 17. C#:檢查用戶是否有權訪問服務器沒有嘗試連接
- 18. 如何檢查文本文件是否正在使用?
- 19. 嘗試檢查int []是否爲空Java
- 20. Symfony檢查是否捕獲正在工作
- 21. 是否有嵌套嘗試和捕獲的替代方法?
- 22. 嵌套多個嘗試/捕獲 - 是否有更好的方法?
- 23. 嘗試捕獲異常,而循環
- 24. 檢查URL是否在Android中有效,但沒有捕獲異常?
- 25. 有沒有辦法嘗試在C#中捕獲靜態屬性?
- 26. 檢查在Doctrine2中是否存在沒有捕獲異常的關聯?
- 27. Powershell - 檢查文件是否正在使用
- 28. 檢查文件是否正在使用api下載鉻版
- 29. 如何檢查文件是否正在使用?
- 30. PHP檢查文件是否正在使用
那麼,爲什麼你想知道?無論如何要打開文件?然後,您可以跳過檢查並直接嘗試,因爲無論如何您都可以參加比賽。 – Joey 2013-03-12 13:26:40
@不是必需的,但主要是它的原因,但是一旦涉及第三方工具,它將有助於確定文件是否可以被opoened或不被稱爲第三方的開放方法,無論如何,我期望hace這樣一種方法,而不是將該捕獲聲明作爲該計劃的藝術來實施。 – CloudyMarble 2013-03-12 13:31:17
可能重複的[如何檢查一個文件是否已經被C中的另一個進程打開?](http://stackoverflow.com/questions/1951791/how-to-check-if-a-file-is-already-由c中的另一個進程打開) – 2013-03-12 13:50:50