我正在尝试打开一个目录,该目录的名称(路径)当前在std :: string中,该目录最初是从.csv文件读取的(尽管我不认为该字符串本身会发生任何变化)。调用opendir(path.c_str())返回NULL。我尝试了以下代码,在opendir()之外进行了转换:

DIR *dir;
bool first = True;
string level = "";
struct dirent *ent;

const char * c = path.c_str();
// A
if ((dir = opendir(c)) != NULL){
    // do stuff
    // should open the directory and go here
}else{
    // always ends up here
}


尽管此操作失败,并出现路径=“ LeanDataBase”,但项目文件夹中的目录用opendir(“ LeanDataBase”)替代opendir(c)似乎可以打开目录。但是,此函数是递归的,因此我无法对此值进行硬编码,否则它将无法工作并陷入无限循环。

我也尝试打印类型,在前面的代码中,在“ A”之后插入以下两行:

cout << typeid(c).name() << endl;
cout << typeid("LeanDataBase").name() << endl;


产生以下输出:

PKc
A13_c


这是否意味着我将错误的类型传递给opendir()?似乎可以处理PKc,但不能处理A13_c。有没有办法将路径字符串转换为正确的类型?

最佳答案

看着我的水晶球,我看到以下问题:在调用path.c_str()之后但在调用opendir()之前修改路径(甚至离开范围)。在任何变量中记住c_str()的结果通常是一种不好的做法,因为它会导致类似这样的问题。 c_str()适用于就地使用,如下所示

opendir(path.c_str());

09-06 19:45