c++ - 无法在 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"); ),但这也没有用。
解决方案
问题是,当前工作目录不是db.config
文件所在的目录。您似乎将它与.cpp文件放在同一目录中。当前的工作目录可能有所不同。最终,您需要决定db.config
文件所在的位置,有很多选择,但这里有一个简单的解决方案:
- 查看应用程序二进制文件在哪里。
- 如果还没有,请复制
db.config
到那里。 - 在您的代码中,在加载文件之前切换到该目录,您可以像这样使用 Qt 执行此操作:
QDir::setCurrent(QCoreApplication::applicationDirPath());
请注意,如果用户从命令行运行程序,并且允许将文件作为参数提供,那么更改程序内部的工作目录可能会导致找不到这些文件。在这种情况下,构造绝对路径db.config
而不是更改工作目录。
您可以阅读QStandardPaths文档以更好地了解您实际想要存储db.config
文件的位置。这取决于您计划如何分发应用程序。如果你只是想把它放进去.zip
或其他什么东西,那么与应用程序二进制文件相同的目录可能就可以了。
推荐阅读
- typescript - 打字稿没有缩小函数的返回值
- r - 使用 R 和 ggplot2 基于 2 个变量的堆积柱形图
- python - 如何在python中创建字典列表
- python - 在 Django 中为 SQL Server 2000 创建数据库游标会引发 ProgrammingError: SYSDATETIME Is Not A Recognized Function Name
- reactjs - 第二次点击时反应状态更新渲染
- mongodb - 如何显示从 MongoDB 检索到的二进制图像?
- javascript - 在 setInterval 中,异步函数进入队列并通过内存泄漏使应用程序冻结,在 javascript
- android - 添加依赖项后,Android Studio“无法解析类 com.twitter.sdk.android.core.identity.TwitterLoginButton”
- swiftui - MapKit GeodesicPolyline 缩放以显示路线
- arrays - TypeScript-从数组中的数组中提取值