Можно открыть файл на C ++ под MacOs - PullRequest
0 голосов
/ 14 июля 2020

Я хочу открыть и прочитать файл на C ++. Поэтому я написал следующий код:

#include <fstream>
#include <iostream>
#include <string>
    
    ...
    
string line;
ifstream file;
file.open("./db.config");
if (file.is_open()) {
    cout << "File is open" << endl;
    getline(file, line);
    file.close();
}else cout << "File is not open" << endl;

Этот код написан в main. cpp. Я проверил, что main. cpp и db.config находятся в одном каталоге. введите описание изображения здесь

Я не получаю ошибок времени компиляции или выполнения. Он только печатает «Файл не открыт». Я также пробовал без "./" (file.open ("db.config");), но это тоже не сработало.

1 Ответ

2 голосов
/ 14 июля 2020

Проблема в том, что текущий рабочий каталог не тот, в котором находится файл db.config. Кажется, он находится в том же каталоге, что и файл . cpp. Текущий рабочий каталог, вероятно, отличается. В конечном итоге вам нужно решить, где вы хотите разместить файл db.config. Есть много вариантов, но вот простое решение:

  1. Посмотрите, где находится двоичный файл приложения.
  2. Копировать db.config там, если его там еще нет.
  3. В вашем коде перейдите в этот каталог перед загрузкой файла, что вы можете сделать с Qt следующим образом: QDir::setCurrent(QCoreApplication::applicationDirPath());

Обратите внимание, что если пользователь запускает программу из командной строки и может указывать файлы в качестве аргументов, то изменение рабочего каталога внутри программы может привести к тому, что эти файлы не будут найдены. В этом случае вместо изменения рабочего каталога создайте абсолютный путь к db.config.

Вы можете прочитать QStandardPaths документы, чтобы лучше понять, где вы на самом деле хотите хранить файл db.config. Это зависит от того, как вы планируете распространять приложение. Если вы просто хотите поместить его в .zip или что-то в этом роде, то вам подойдет тот же каталог с двоичным файлом приложения.

...