2016-08-25 8 views
0

Я прочитал несколько тем об относительном пути, но я часами блуждал по ним без ответа. код выглядит так:Добавление «../xx.txt» к относительному пути работает в C++

std::string path = "./Debug/"; 
path.append("../hi.txt/"); 
std::ifstream inFile(path); 
std::string str; 
if (inFile.is_open()) 
{ 
    inFile >> str; 
    std::cout << str << std::endl; 
} 
else 
{ 
    std::cout << "open failed" << std::endl; 
} 

Этот код выведет: «Не удалось открыть». Любая помощь будет оценена по достоинству.

+3

Является hi.txt действительно подкаталог? Если нет, то после этого не ставьте трейлинг-косую черту, –

+0

Я абсолютно подтверждаю, что –

ответ

4

Когда вы положили / в конце пути, он сообщает системе выполнить его как каталог (т. Е. Перечислить его содержимое). Поскольку hi.txt не является каталогом, вы не можете выполнить его как каталог и, следовательно, он не работает (предполагается, что вы не указали каталог hi.txt).

Чтобы это исправить: удалить /:

std::string path = "./Debug/" ; 
path.append("../hi.txt") ; 
+0

«выполнить» означает «открыть» –

+0

@ M.M Не обязательно. Символические ссылки добавляют забавный бизнес. Я имею в виду, как Linux вызывает каталоги (и символические ссылки на каталоги) как имеющие установленный флаг выполнения. Если '/ path/to/a' является символической ссылкой на каталог'/path/to/b', то 'ls -la/path/to/a' предоставит вам информацию о символической ссылке, но' ls - la/path/to/a/'даст вам тот же результат, что и' ls -la/path/to/b/', потому что он« исполняет »этот файл как файловую систему, и он разрешает правильный каталог. Но в упрощенном виде это абсолютно «открытая» операция. – iAdjunct