假設有一個一些字符串:如何檢查字符串是否指定目錄?
std::string some_string = "some_string";
而且我想知道,如果chdir(some_string.c_str())
將返回-1,並無須調用它。有沒有快速的方法來做到這一點?
P.S.我想我的代碼也可以用於windows,那麼我將使用_chdir()
假設有一個一些字符串:如何檢查字符串是否指定目錄?
std::string some_string = "some_string";
而且我想知道,如果chdir(some_string.c_str())
將返回-1,並無須調用它。有沒有快速的方法來做到這一點?
P.S.我想我的代碼也可以用於windows,那麼我將使用_chdir()
#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。
我會用Boost's is_directory function,你可以在Boost's Filesystem Reference page找到更多的信息。
由於您希望它適用於Windows,請使用GetFileAttributes()
,它返回File Attribute Constants
。
我希望它不僅適用於Windows,而且適用於Windows :) – 2011-04-07 15:02:31
我想知道,如果
chdir(some_string.c_str())
將返回-1,並無須調用它
你必須要小心使這些各式各樣的檢查。問題在於,如果依賴於結果,因爲在執行檢查和執行依賴於檢查的操作之間,另一個進程可能執行了一個操作(在這種情況下爲rmdir
),這會使代碼中的assumptin失效。也就是說,您可以在代碼中引入競爭風險。
其實在msdn(http://msdn.microsoft.com/en-us/library/bf7fwze1(v=vs.80).aspx)上有一個例子,其中_chdir用來檢查目錄是否存在,所以顯然沒有簡單的方法來做到這一點,而不需要調用函數。你爲什麼不打電話呢? – 2011-04-07 11:58:28
無論如何你總是需要檢查文件/目錄的東西。你不能阻止一些其他進程在你檢查之後並且在運行chdir之前刪除目錄 – 2011-04-07 12:20:22