2011-04-05 162 views

回答

3

你必須要麼一)停止其正在使用該文件或b)等到文件不再使用的過程。

你應該閱讀這個維基百科條目File Locking。請特別注意「在Microsoft Windows」中的段落,您可以更好地瞭解文件鎖定的工作原理。

如果另一個程序打開該文件與共享模式參數,說明該文件將甚至讀訪問共享的,那麼就沒有什麼可以真正做到從複印操作您的應用程序。

如果您熱衷於「扮演上帝」,並且您願意終止可能鎖定您所關注文件的進程,那麼您可以試着找出使用哪個進程來保存文件在這個線程的信息:How do I find out which process is locking a file using .NET?

一個更好的策略可能是調查爲什麼您正在複製的文件被鎖定,以及是否有可能避免衝突的鎖,通過在文件上設置限制文件權限或者通過重新配置競爭鎖定文件的軟件。例如。如果防病毒程序偶爾掃描應用程序使用的文件夾結構,則可以告訴軟件忽略該特定文件夾。

如果執行時間不重要,則可能會延遲或延遲複製操作。相反,一個簡單的策略是獲得那個鎖定文件的下一個迭代。另一種策略可能涉及聽事件,例如從FileSystemWatcher類,有想法Wait until file is unlocked in .NET

0

要找出哪個進程鎖定它,你可以嘗試http://www.filehippo.com/download_unlocker/

+0

我它,它說「沒有找到鎖定手柄」,那麼還有什麼可能造成這種情況? – 2013-06-18 23:45:08

+0

@TomStickel你可以刪除它並重新創建它嗎? – ysrb 2013-06-18 23:50:47

+0

嗯,我試圖做到這一點,作爲自動檢查安裝的WiX MSI構建的一部分,有時我想這個文件「可以」被打開。 – 2013-06-18 23:54:11

1

試試這個

File.Open(name, FileMode.Open, FileAccess.Read, FileShare.None); 

退房this鏈接查看更多細節

相關問題