2011-04-07 83 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失效。也就是说,您可以在代码中引入竞争风险。

相关问题