2013-03-10 267 views
2

我正在使用boost 1.52,當我試圖從網絡驅動器中獲取文件時,我無權讀取該文件。使用後我得到一個例外boost::filesystem::exists(fileName)
有沒有比在每個地方只做try, catch更好的工作?boost :: filesystem :: exists崩潰

我已經切換回我的老代碼現在:

bool FileExists(const char* fileName) 
{ 
    struct stat my_stat; 
    return (stat(fileName, &my_stat) == 0); 
} 

//boost Exists throws exception if there are no permissions for share folder 
bool FileExists(const std::string& fileName) 
{ 
    return FileExists(fileName.c_str()); 
} 
+1

難道你不能只使用你正在使用的函數,用'boost :: filesystem :: exists'替換'stat'以及必要的異常處理嗎?那麼你不必在每個地方都使用try-catch。它在這個功能中是孤立的。 – 2013-03-10 17:18:27

回答

3

使用overload不扔。

bool exists(const path& p, system::error_code& ec) noexcept; 

你會想檢查輸出參數,所以這可能比捕捉異常更有效。這取決於你想要完成的事情。

+0

我只是想獲得一個配置文件。我想在開始解析它之前檢查它是否存在,並且如果我有權從網絡驅動器讀取它 – Gilad 2013-03-10 17:10:59

+0

您是否意識到這個想法的固有競爭條件?在存在返回之後但在分析它之前,該文件可能會被刪除。 – 2013-03-10 17:22:24

+0

是的,但它是一個簡單的系統。用戶意識到這個問題。我想要解決的另一個問題是權限。 – Gilad 2013-03-10 17:24:25