2013-08-01 58 views
0

我正在尋找的是一種方法來阻止線程,直到它成功地使用boost-filesystem刪除文件夾。如何以阻塞的方式刪除文件/文件夾?

如果一個文件夾包含一個正在使用的文件,它應該只在文件被釋放併成功刪除後纔會被阻止並繼續。

+0

因爲它是一個OS特定功能,很難說通常,調用線程將如何表現。但是我想說,對於大多數操作系統來說,在此操作過程中線程**將被阻塞。 –

+0

這是什麼操作系統? –

回答

1

使用boost文件系統操作remove_all()應該爲您正常完成這項工作。

我猜你指的是這個操作可能拋出異常或返回一個錯誤而不是等待的問題,當一個文件由於併發訪問而無法刪除時。 你可以簡單地通過捕捉異常解決這個問題,並把try/catch塊運行,直到整個操作沒有任何錯誤或異常做了一個循環內:

boost::filesystem::path dirToRemove("SomeDirectoryToRemove"); 
bool completed = false; 
while(!completed) 
{ 
    try 
    { 
     boost::filesystem::remove_all(dirToRemove); 
     completed = true; 
    } 
    catch(...) 
    { 
     // put a sleep() call or other blocking operation here, to give other 
     // threads a chance to run, while this one waits to get rid of the error 
     // condition. 
    } 
} 
相關問題