2010-01-22 58 views
5

在我的應用程序中,我試圖重命名該文件夾,但是如果該文件夾在Windows資源管理器中打開,我將獲得一個IOException。如何識別是否在C#中的Windows資源管理器中打開文件夾?如何識別是否打開文件夾?

+0

Windows資源管理器,cmd,其他文件管理器,shell打開/保存對話框。除了資源管理器之外,還有更多的東西可以讓這個開放。 – Joey 2010-01-22 15:54:05

+0

您是否想要確定Windows資源管理器是專門打開它,還是僅僅確定某個其他進程是否具有打開的句柄?你想完成什麼?捕獲異常是一個很好的跡象,表明某些其他進程可以處理它,如果這就是你想要的。 – Dathan 2010-01-22 15:57:05

+0

@Dathan捕捉異常是個好主意,但我們有非常大的代碼庫的多線程應用程序。如果我們識別出我們已經接受的天氣,那就太好了。謝謝 – 2010-01-22 16:02:38

回答

8

catch the IOException?

正如其他人所說的,只是嘗試做你想做的事情,如果發生了異常並採取適當的行動,無論在你的情況下如何。

你真的沒有太多的選擇,因爲我看到它,認爲:

bool iHaveAccess = CheckAccess(folder); 
if (iHaveAccess) 
{ 
    RenameFolder(folder,newFolderName); 
} 

成功,並呼籲RenameFolder別的鎖定該文件夾的checkAccess之間是否會發生什麼?那麼怎麼辦?

+0

是的,這是我如何去做。無論如何,你應該可以監控這個。 – Toji 2010-01-22 15:56:03

1

確定某個程序是否打開了一個文件夾,以防止重命名該文件夾是不合理的。因爲在您做出決定之後,其他進程可能會啓動或停止使用該文件夾。相反,只需執行操作並捕獲所產生的異常。

try { 
    Directory.Move("old","new"); 
    return true; 
} catch (IOException) { 
    return false; 
} 
0

一個小的搜索後,我發現this postthis post它們顯示瞭如何編程方式確定哪個進程已鎖定文件的各種技術。其中一個應該允許您檢查資源管理器是否鎖定了該文件夾。

相關問題