Я пытаюсь открыть каталог, имя которого (путь) в настоящее время находится в std :: string, изначально прочитанной из CSV-файла (хотя я не думаю, что что-то изменит сама строка). Вызов opendir (path.c_str()) возвращает NULL. Я попытался следующий код, делая преобразование вне opendir():Почему не будет opendir() открыть путь после преобразования пути с помощью c_str()?
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 (с), похоже, открывает каталог. Однако эта функция рекурсивна, поэтому я не могу жестко закодировать это значение или она не работает и попадает в бесконечный цикл.
Я также попытался печати типов, со следующими двумя линиями, вставленных сразу после «А» в предыдущем коде:
cout << typeid(c).name() << endl;
cout << typeid("LeanDataBase").name() << endl;
которая дала следующие результаты:
PKc
A13_c
Означает ли это, что я передаю неправильный тип opendir()? Кажется, он может обрабатывать PKc, но не A13_c. Есть ли способ преобразовать строку пути в правильный тип?
И соответствующую информацию: какова * стоимость (текстовой) * из 'c' во время вызова? Поскольку указание строки работает (с известным значением), а 'c' имеет правильный тип, тогда вероятный виновник - это фактическое значение, указанное .. неожиданно/различно. – user2864740
Также проверьте 'errno' –
Психическое предсказание: Строка с ошибкой включает в себя символ новой строки и/или возврата каретки, который был в файле, который был прочитан, и не был удален. – ShadowRanger