我有这个函数来返回指定的目录是否存在:
double directory_exists(char *pathname)
{
struct stat sb;
return (stat(pathname,&sb) == 0 &&
S_ISDIR(sb.st_mode));
}
但是,如果用户输入的最后一个字符是斜杠(" \"在Windows上或" /"在Mac / Linux上)我想删除路径名中的那个字符,并将该值存储在一个新变量中,并在stat()中使用该变量而不是路径名。
stat()会认为这条路径并不存在,如果最后恰好是一个斜线,并且因为有些人(不是每个人)都认为在他们的结尾处放一个斜线pathname,我想通过检测它们是否在末尾使用斜线然后将其删除来迎合它。
我正在寻找适用于Windows / Mac / Linux的便携式解决方案。
谢谢!
答案 0 :(得分:1)
我找到了解决方案。我想在问这里之前我应该多搜索一下。
double directory_exists(char *pathname)
{
std::string str(pathname);
if (!str.empty())
{
while (*str.rbegin() == '\\' || *str.rbegin() == '/')
{
str.erase(str.size()-1);
}
}
struct stat sb;
return (stat((char *)str.c_str(),&sb) == 0 &&
S_ISDIR(sb.st_mode));
}
这种方法的优点在于它不需要C ++ 11,这与string :: back()和string :: pop_back()不同。