在 mac 上执行 .app 时,fstream 和 qfile 不创建文件
fstream and qfile don't create file when .app is executed on mac
我目前正在为 MacOs 和 Windows 开发 Qt 应用程序。在这个应用程序中,我需要写入和读取一个文件。虽然已部署的应用程序在 Windows 和 Linux 上运行良好,但在 Mac 上却不行。目前有 3 个不同的 "outcomes"。 (仅限 Mac)
- 当我 运行 使用 Qt Creator 的应用程序时,文件是在同一个文件中创建和加载的
可执行文件所在的位置(在 .app/Contents/MacOS/)。
- 当我执行部署文件夹中的 .app 文件时,open() 失败
- 当我执行 exec(位于 .app/Contents/MacOS/)时,文件被创建并加载到我的主目录中
没有错误消息或任何错误消息,它只是在情况 2 中不执行任何操作。
我正在 Mac 上使用 Qt-Creator 4.5 和 Qt 5.10.0 在 MacOS High Sierra 10.13.2
上进行测试
我包括fstream
出口:
std::ofstream csvExport;
csvExport.open("save.csv", std::ofstream::out);
导入
std::ifstream csvImport;
csvImport.open("save.csv", std::ifstream::in);
我在使用 QFile 时观察到相同的行为
当你说你必须写入或读取一个文件时,你为什么不在一些有意义的地方创建这个文件,例如在 Documents\YourAppName 目录中?
而不是依赖于 OS 和 Qt 实现提供具有已知行为的有效路径。
您可以使用 QStandardPaths
Qt class 找到我的文档目录。
所以你的目录可以是QStandardPaths::DocumentsLocation
QDir pathToWrite( QStandardPaths::displayName(QStandardPaths::DocumentsLocation) + "YourAppName" );
这将始终为您提供定义的行为。
我目前正在为 MacOs 和 Windows 开发 Qt 应用程序。在这个应用程序中,我需要写入和读取一个文件。虽然已部署的应用程序在 Windows 和 Linux 上运行良好,但在 Mac 上却不行。目前有 3 个不同的 "outcomes"。 (仅限 Mac)
- 当我 运行 使用 Qt Creator 的应用程序时,文件是在同一个文件中创建和加载的 可执行文件所在的位置(在 .app/Contents/MacOS/)。
- 当我执行部署文件夹中的 .app 文件时,open() 失败
- 当我执行 exec(位于 .app/Contents/MacOS/)时,文件被创建并加载到我的主目录中
没有错误消息或任何错误消息,它只是在情况 2 中不执行任何操作。 我正在 Mac 上使用 Qt-Creator 4.5 和 Qt 5.10.0 在 MacOS High Sierra 10.13.2
上进行测试我包括fstream 出口:
std::ofstream csvExport;
csvExport.open("save.csv", std::ofstream::out);
导入
std::ifstream csvImport;
csvImport.open("save.csv", std::ifstream::in);
我在使用 QFile 时观察到相同的行为
当你说你必须写入或读取一个文件时,你为什么不在一些有意义的地方创建这个文件,例如在 Documents\YourAppName 目录中?
而不是依赖于 OS 和 Qt 实现提供具有已知行为的有效路径。
您可以使用 QStandardPaths
Qt class 找到我的文档目录。
所以你的目录可以是QStandardPaths::DocumentsLocation
QDir pathToWrite( QStandardPaths::displayName(QStandardPaths::DocumentsLocation) + "YourAppName" );
这将始终为您提供定义的行为。