c++ - 在 mac 上执行 .app 时,fstream 和 qfile 不创建文件

标签 c++ macos qt qt-creator fstream

我目前正在为 MacO 和 Windows 开发 Qt 应用程序。在这个应用程序中,我需要写入和读取一个文件。虽然已部署的应用程序在 Windows 和 Linux 上运行良好,但在 Mac 上却不行。目前有 3 种不同的“结果”。 (仅限 Mac)

  1. 当我使用 Qt Creator 运行应用程序时,文件会在同一个文件中创建和加载 可执行文件所在的位置(在 .app/Contents/MacOS/)。
  2. 当我执行部署文件夹中的 .app 文件时,open() 失败
  3. 当我执行 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 目录中?

而不是依赖于操作系统和 Qt 实现提供具有已知行为的有效路径。

您可以使用QStandardPathsQt 类来查找我的文档目录。 所以你的目录可以是 QStandardPaths::DocumentsLocation

QDir pathToWrite( QStandardPaths::displayName(QStandardPaths::DocumentsLocation) + "YourAppName" );

这将始终为您提供定义的行为。

关于c++ - 在 mac 上执行 .app 时,fstream 和 qfile 不创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167284/

相关文章:

c++ - 相同用户数据的 Lua 数组和面向对象访问

c++ - 名称中带有空格的临时类型的统一初始化的正确语法,如 unsigned int

macos - Interface-Builder: "combine"NSView-class with .xib

python - Qscrollarea 不显示滚动条并且布局弹出不合适

python - 为什么不能使用 QComboBox、QDataWidgetMapper 和 QSqlRelationalTableModel 进行编辑?

c++ - 如果其中一个进程意外终止,进程间内存会发生什么情况?

c++ - 在 C++11 中编写 Copy/Move/operator= 三重奏的 "correct"方法是什么?

c++ - C++ 中的跨平台网络代码?

c++ - OS X 上的链接器 (ld) : How to use -Wl, --start-group(和 --end-group)?

visual-studio - 使用 Visual Studio 的 QNetworkAccessManager 问题