无法在 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
文件驻留的位置,有很多选择,但这里有一个简单的解决方案:
- 查看应用程序二进制文件的位置。
- 复制
db.config
如果那里还没有。
- 在您的代码中,在加载文件之前切换到该目录,您可以像这样使用 Qt 执行此操作:
QDir::setCurrent(QCoreApplication::applicationDirPath());
请注意,如果用户从命令行运行程序,并允许将文件作为参数提供,则更改程序内部的工作目录可能会导致找不到这些文件。在这种情况下,构建 db.config
的绝对路径而不是更改工作目录。
您可以阅读 QStandardPaths 文档以更好地了解您实际 想要 存储 db.config
文件的位置。这取决于您计划如何分发应用程序。如果您只想将它放在 .zip
或其他地方,那么与应用程序二进制文件相同的目录可能没问题。
我想用 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
文件驻留的位置,有很多选择,但这里有一个简单的解决方案:
- 查看应用程序二进制文件的位置。
- 复制
db.config
如果那里还没有。 - 在您的代码中,在加载文件之前切换到该目录,您可以像这样使用 Qt 执行此操作:
QDir::setCurrent(QCoreApplication::applicationDirPath());
请注意,如果用户从命令行运行程序,并允许将文件作为参数提供,则更改程序内部的工作目录可能会导致找不到这些文件。在这种情况下,构建 db.config
的绝对路径而不是更改工作目录。
您可以阅读 QStandardPaths 文档以更好地了解您实际 想要 存储 db.config
文件的位置。这取决于您计划如何分发应用程序。如果您只想将它放在 .zip
或其他地方,那么与应用程序二进制文件相同的目录可能没问题。