首页 > 解决方案 > 无法在 MacOs 下用 C++ 打开文件

问题描述

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

标签: c++qtifstream

解决方案


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

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

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


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


推荐阅读