无法在 MacOs 下用 C++ 打开文件

Can' open File in C++ under MacOs

我想用 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"); ),但这也没有用。

问题是,当前工作目录不是 db.config 文件所在的目录。您似乎将它与 .cpp 文件放在同一目录中。当前工作目录可能有所不同。最终你需要决定你想要 db.config 文件驻留的位置,有很多选择,但这里有一个简单的解决方案:

  1. 查看应用程序二进制文件的位置。
  2. 复制 db.config 如果那里还没有。
  3. 在您的代码中,在加载文件之前切换到该目录,您可以像这样使用 Qt 执行此操作: QDir::setCurrent(QCoreApplication::applicationDirPath());

请注意,如果用户从命令行运行程序,并允许将文件作为参数提供,则更改程序内部的工作目录可能会导致找不到这些文件。在这种情况下,构建 db.config 的绝对路径而不是更改工作目录。


您可以阅读 QStandardPaths 文档以更好地了解您实际 想要 存储 db.config 文件的位置。这取决于您计划如何分发应用程序。如果您只想将它​​放在 .zip 或其他地方,那么与应用程序二进制文件相同的目录可能没问题。