С ++ не может найти файл (я думаю) - PullRequest
2 голосов
/ 12 декабря 2010

У меня есть следующий код (упрощенно)

int main()
{
    ifstream myFile("input.txt");
    if(myFile.is_open())
        cout<<"test";
}

Однако myFile.is_open() возвращает ложь;

почему?

Я использую затмение и вводФайл .txt находится прямо в папке src с файлом .cpp ...

Спасибо!

Ответы [ 5 ]

7 голосов
/ 12 декабря 2010

Каждый исполняемый файл - по умолчанию - запускается из каталога вашего проекта .Поэтому для дерева, подобного этому:

project
 |- src
 |  |- a.cpp
 |  |- b.cpp
 |  |- foo.txt
 |
 |- Debug
 |  |- a.exe
 |
 |- foo2.txt

Вы должны использовать пути типа src/foo.txt или foo2.txt.Ваш exe находится в каталоге Debug, но он все равно будет запускаться из каталога вашего проекта.Таким образом, все исполняемые файлы конфигурации сборки запускаются одинаково (из одного и того же места).

Вы можете изменить свой рабочий каталог и аргументы в разделе Запустить конфигурации (выпадающее меню следующеена иконку "запустить").Перейдите на вкладку «Аргументы», снимите флажок «Использовать по умолчанию» и установите любой из параметров, если вам не подходит значение по умолчанию.

1 голос
/ 12 декабря 2010

У вас есть файл input.txt в папке source, но приложение выполняется из папки Debug;из «источника» он расположен на ..\Debug.Просто поместите туда свой текстовый файл, и он должен нормально работать.

1 голос
/ 12 декабря 2010

Проверьте рабочий каталог Eclipse для вас. Это может быть двоичным. Попробуйте поместить файл input.txt в тот же каталог, что и двоичные компиляторы Eclipse из вашего кода, а затем запустите приложение.

Чтобы найти настройки рабочего каталога вашего проекта, посмотрите диалог настроек проекта.

Тем не менее, это, вероятно, хорошая идея - кодировать способом, независимым от вашего рабочего каталога. Вы можете установить каталог установки бинарного файла в константную строку препроцессора, а ваш скрипт установки (или скрипт конфигурации) должен установить #define в соответствующий каталог. Или, если это не вариант, вы можете получить значение каталога во время выполнения.

1 голос
/ 12 декабря 2010

Если вы не укажете полный путь, программа будет искать в текущем каталоге, который, вероятно, в вашем случае является каталогом, в котором собран исполняемый файл edit: получается, что по умолчанию это каталог проекта (спасибо @Kos) .

Вы можете переместить input.txt в этот каталог, указать полный путь (или правильныйотносительный) или поручите вашей IDE запустить исполняемый файл с другим текущим каталогом (я не знаю, возможно ли это с Eclipse, я предлагаю это, потому что с VS вы можете сделать это).

Кстати,в общем, вам следует избегать жестких кодов путей в ваших источниках.

0 голосов
/ 12 декабря 2010

Вы, вероятно, должны установить рабочий каталог eclipse в свой каталог src. Я понятия не имею, что по умолчанию.

...