2016-03-10 9 views
4

Я пишу тестовые примеры прямо сейчас, и я создал несколько тестовых файлов, которые я пытаюсь прочитать. Абсолютный путь:Как открыть файл с относительным путем в C++?

/home/user/code/Project/source/Project/components/Project/test/file.dat 

, но, по очевидным причинам, тестирование с абсолютным путем является плохим. Поэтому я пытаюсь преобразовать абсолютный путь в относительный, и я не знаю, почему он не работает. Я создал файл с относительным путем

findme.dat 

, и я нашел его в

/home/user/code/Project/build/source/Project/components/Project/test/findme.dat 

поэтому я создал относительный путь

/../../../../../../source/Project/components/Project/test/file.dat 

но файл не открыт и не связан с Объект is, std::ifstream is (path);, а функция is.is_open() функция возвращается.

Вы можете мне помочь?

+0

Каков текущий рабочий каталог вашей программы? Путь, который вы указываете, должен быть относительно CWD. Кроме того, поскольку вы запускаете путь с помощью '/', это означает, что вы начинаете * в корневом каталоге *, и поскольку для корня нет родительского каталога, это означает, что '/ ..' совпадает с '/', что приводит к вашему пути равным '/ source/Project/components/Project/test/file.dat' –

+0

Все зависит от текущего рабочего каталога. т.е. где размещена ваша программа. –

+0

Ваш «относительный» путь не является относительным. Он должен начинаться с точки вместо косой черты. например, /../../../../../../source/Project/components/Project/test/file.dat –

ответ

9

То, что вы используете, вовсе не относительный путь. Конечно, вы используете синтаксис относительного пути, но не фактический смысл того, что это такое.

/../../../../../../source/Project/components/Project/test/file.dat

Этот путь начинается с/что означает корень, то находит его родитель, который снова вернуть корень, так как корень не имеет родителя и продолжается ... упрощенная версия этого:

/source/Project/components/Project/test/file.dat

Поэтому он будет искать источник папки в корне, который, конечно, не существует.

Что вы должны сделать что-то вроде этого (если ваш код находится в папке проекта):

./test/file.dat

или если он находится в какой-либо другой папке в папка проекта вы можете сделать что-то вроде этого:

../test/file.dat

../ доставит вас к родительскому каталогу вашего текущего кода, который по предположению этого случая является Project.