2011-04-07 84 views
4

假設有一個一些字符串:如何檢查字符串是否指定目錄?

std::string some_string = "some_string"; 

而且我想知道,如果chdir(some_string.c_str())將返回-1,並無須調用它。有沒有快速的方法來做到這一點?

P.S.我想我的代碼也可以用於windows,那麼我將使用_chdir()

+0

其實在msdn(http://msdn.microsoft.com/en-us/library/bf7fwze1(v=vs.80).aspx)上有一個例子,其中_chdir用來檢查目錄是否存在,所以顯然沒有簡單的方法來做到這一點,而不需要調用函數。你爲什麼不打電話呢? – 2011-04-07 11:58:28

+0

無論如何你總是需要檢查文件/目錄的東西。你不能阻止一些其他進程在你檢查之後並且在運行chdir之前刪除目錄 – 2011-04-07 12:20:22

回答

2
#ifdef WIN32 
# include <io.h> 
#else 
# include <unistd.h> 
#endif 

int access(const char *pathname, int mode); 
// check user's permissions for a file 

INT模式值:

00 - 只存在, 02 - 只寫, 04 - 只讀, 06 - 讀取和寫入。

如果文件具有給定的模式,函數返回0。

+0

我聽說過使用ACL時在Windows上訪問的問題。我沒有文檔,但需要注意。 – 2011-04-07 12:00:45

+0

@Andrew White:我沒有聽到,但可能會發生任何事情。 – Naszta 2011-04-07 12:01:50

+0

我可能會誤解某些東西,但我認爲OP想知道如何檢查路徑是*目錄*,而不是它是在文件系統中(作爲文件還是目錄),這是access()的作用。我認爲你可以通過宏S_ISDIR來使用stat,參見:http://linux.die.net/man/2/stat。 – JJC 2013-02-12 16:00:07

2

我想知道,如果chdir(some_string.c_str())將返回-1,並無須調用它

你必須要小心使這些各式各樣的檢查。問題在於,如果依賴於結果,因爲在執行檢查和執行依賴於檢查的操作之間,另一個進程可能執行了一個操作(在這種情況下爲rmdir),這會使代碼中的assumptin失效。也就是說,您可以在代碼中引入競爭風險。

相關問題