Прочитать файл из текущего каталога с помощью ifstream и QtCreator

Я использую Qt Creator для простого проекта C ++ без библиотек Qt.

Я пытаюсь открыть такой файл:

fopen("text.txt", "r");

or

ifstream fin;
fin.open("text.txt");

Но он не работает только с именем файла, как в Visual Studio, мне нужно передать полный путь, чтобы открыть файл ...

Кто-нибудь знает, почему? и как я могу обратиться к текущему каталогу без использования библиотек Qt?


person Chrono    schedule 16.01.2012    source источник
comment
Вы уверены, что ваш текущий каталог действительно такой, как вы думаете?   -  person Kerrek SB    schedule 16.01.2012
comment
Чтобы получить текущий каталог без Qt, см. Этот вопрос: stackoverflow.com/questions/143174/   -  person Tomas Andrle    schedule 16.01.2012


Ответы (3)


Вы можете использовать QDir::current(), чтобы проверить, является ли рабочий каталог таким, каким вы хотите его видеть. Без Qt вы можете использовать решение, связанное с TomA.

параметры запуска позволяют настроить его для запуска приложение из IDE.

person Georg Fritzsche    schedule 16.01.2012

Так и будет; ваш код в порядке. Но, как указывается в других ответах, вам нужно убедиться, что вы запускаете его в каталоге, который, по вашему мнению, вы находитесь.

На левой панели выберите «Проекты», затем (на вкладках вверху) «Параметры запуска», и он покажет вам, откуда запускается исполняемый файл в поле «Рабочий каталог». Я думаю, что по умолчанию это каталог над папками выпуска и отладки.

person Samuel Harmer    schedule 16.01.2012
comment
Спасибо: D, вы правы, я использовал вариант теневой сборки, поэтому он строился на другой папке. - person Chrono; 16.01.2012

Разница между Visual Studio и Qt Creator может заключаться в том, что

  1. Каждый запускает двоичный файл программы в отдельном подкаталоге структуры вашего проекта.
  2. Один копирует файл text.txt как часть вашего проекта в тот же выходной каталог, что и двоичный файл, другой - нет.

Попробуйте получить текущий каталог, используя this а затем посмотрите, действительно ли он содержит файл.

person Tomas Andrle    schedule 16.01.2012