【问题标题】:openSUSE, where do QFiles get saved?openSUSE,QFiles 保存在哪里?
【发布时间】:2021-09-29 15:06:23
【问题描述】:

好的,所以这听起来可能非常微不足道,但我完全被难住了。我的最终目标是写入 .xlsx 文件或 .csv 文件,但对于初学者,我想我会尝试使用 QFile 在 qt 中打开或创建一个简单的 .txt 文件,如下所示:

int main(int argc, char *argv[]){
 QApplication a(argc, argv);
 MainWindow w;

 QString filename = "test.txt";
 QFile file(filename);
 
 if(file.open(QFile::ReadWrite | QFile::Text)){
  QTextStream stream(&file);
  stream << "something" << endl;
 }else{
  qDebug() << "file open error";
 }

 w.show();
 return a.exec();
}

通过这次尝试,我尝试了两种可能性,起初我没有创建 .txt 文件,而是让程序创建一个,它没有引发错误,也没有进入 else 案例。其次,我还尝试打开同一个文件,因为现在它应该已创建,并且再次,没有错误也没有问题。现在我想检查我的代码是否有效,我查找了我的 .txt 文件,但我找不到它。从网上搜集的资料来看,应该是在根目录下,但不是。

之后我决定将路径指定为我的应用程序的路径,如下所示:

int main(int argc, char *argv[]){
 QApplication a(argc, argv);
 MainWindow w;

 QString filename = QApplication::applicationDirPath() + "test.txt";
 QFile file(filename);
 
 if(file.open(QFile::ReadWrite | QFile::Text)){
  QTextStream stream(&file);
  stream << "something" << endl;
 }else{
  qDebug() << "file open error";
 }

 w.show();
 return a.exec();
}

同样的结果,没有错误,在任何地方都找不到文件。我也尝试过QApplication::applicationFilePath(),但这让我想到了else 案例。

所以我要问的是我的文件保存在哪里,或者我如何以一种有效的方式定义文件路径。我正在使用 Qt 5.12.7 和 openSUSE Leap 15.2,非常感谢任何解决方案。

更新: 我玩了一下,没有成功找到文件本身,但我现在确定它们在程序退出后存在并且它们已正确保存,因为我可以正确读取它们,也可以从其他项目访问它们,然后是我创建的项目他们在里面,所以他们肯定不会保存在项目目录中。

【问题讨论】:

  • 文件应该在 build 文件夹中,至少我使用 Windows 10 是这样
  • 感谢您的回答,但我的构建文件夹仅包含 moc 和 .o 文件。你说的是那个文件夹吗?
  • filename 是什么?如果它是绝对路径,则将使用该绝对路径创建文件。如果它是相对路径,那么文件将在相对于可执行文件的当前工作目录的路径中创建。行为与例如std::ofstream 相同——它不特定于QFile
  • 我希望它是一个相对路径,我以为我第一次尝试就做到了。我只希望文件位于我的项目目录中。

标签: c++ qt5 opensuse qfile


【解决方案1】:

相对路径从“当前工作目录”开始,进程创建者负责将其分配给某个特定路径,例如当您从 qtcreator 运行应用程序时,它会根据运行配置分配cwd,您可以编辑运行配置项目选项卡。

如果您不想依赖cwd,只需使用可执行目录作为路径QDir(qApp-&gt;applicationDirPath()).filePath("test.txt") 的基础

【讨论】:

  • 好的,所以我按照你的建议做了,但正如我所说,我之前尝试过。我什至打印了您的命令的结果,它是 /opt/sqlTest/bin/test.txt ,“sqlTest”是我的项目的名称。如果我错了,现在纠正我,但有问题的 opt 文件夹是根目录中的文件夹,但它是空的。该文件不在构建目录中,也不在包含所有 .cpp 和 .h 文件的常规项目文件夹中。
  • 如果您可以访问并阅读它,如您所说,文件必须在那里。你在终端看到了吗? ls -la /opt/sqlTest/bin/test.txt,可能你的文件浏览器访问目录或显示文件有问题?
  • 不,我在终端输入了你的命令,我得到错误文件或目录未找到
  • 您使用 apparmor 或任何其他沙盒实用程序吗?
  • 我正在使用 apparmor,是的,有问题吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多