2015-01-27 4 views
5

Я пытаюсь загрузить файл с помощью fstream. Код выглядит следующим образом:Относительный путь с fstream C++

file.open("../levels/level0.lvl"); 
if (file.is_open()) { 
    while (!file.eof()) { 
     std::getline(file, Str); 
     list = ReadLine(Str, list); 
    } 
} 

Но он ничего не нагружает. Да, только если путь является абсолютным. Как я могу сделать путь относительным?

Папка "levels" размещена в папке отладки. той же папке, что и exe.

+2

Ваш относительный путь является действительным. Возможно, вы путаете свой * активный каталог * с * каталогом вашего исполняемого файла *? –

+0

Вы правы. Спасибо и извините за эту глупую ошибку. – SaschaDeWaal

+2

@Beatnory _'while (! File.eof()) '_ Вы также должны отметить: [** Почему iostream :: eof внутри условия цикла считается неправильным? **] (http: //stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

ответ

6

«Папки« уровни »размещены в папке отладки. Той же папке, что и exe».

Это не имеет значения, в каком положении папка levels находится по отношению к пути выполняемого файла.
Соответствующая папка для определения относительного пути - это рабочий каталог, из которого фактически запускается ваш исполняемый файл.


См. Здесь: fstream doesn't resolve path также.

0

Обработка пути зависит от ОС. Правильный способ справиться с этим - добавить способ пользователя, определяющий путь к вашему приложению, а затем использовать этот путь. Например, вы можете добавить опцию командной строки --level-file=<path>. Затем ваша программа может прочитать путь от этого параметра и передать его в конструктор fstream.

Смотрите мой ответ на этот вопрос больше: https://stackoverflow.com/a/40980510/2345997

Смежные вопросы