假设有一个一些字符串:如何检查字符串是否指定目录?
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