如何在 Qt 5 中写入和读取 QResource 文件?

Posted

技术标签:

【中文标题】如何在 Qt 5 中写入和读取 QResource 文件?【英文标题】:How to write and read to/from a QResource file in Qt 5? 【发布时间】:2018-09-03 10:59:02 【问题描述】:

很奇怪,我通过Add Existing Files...将想要的文件添加到资源中,文件就在那里。我运行 qmake ("Build->Run qmake") 使文件可用。 第一个问题:我无法从输出终端向文件中写入任何内容!但是当我手动写入文件时,每次运行时输出终端都会显示更改它。第二个问题:它仍然显示 QIODevice::read: device not open ! 这是我的代码:

#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <iostream>

void wFile(QString Filename)
 
  QFile  nFile(Filename);
  QTextStream str(&nFile);
  qDebug() << "what do you want to write in the desired file: ";
  str.readLine();
  if (!nFile.open(QFile::WriteOnly  | QFile::Text))
  
    qDebug() << "could not open the file";
    return;
  
  nFile.flush(); 
  nFile.close();
 

void read (QString Filename)
  QFile nFile(Filename);

  if(!nFile.open(QFile::ReadOnly | QFile::Text))
  
    qDebug() << "could not open file for reading";
    return;
  
  QTextStream in(&nFile);
  QString nText = in.readAll();

  qDebug() << nText;
  nFile.close();
 


int main(int argc, char *argv[])

 QCoreApplication a(argc, argv);
 QString nFilename =":/MyFiles/DocumentArminV.txt";

 wFile(nFilename);
 read(nFilename);

 return a.exec();

这里是代码的输出端:

【问题讨论】:

qresource 中保存的项目是只读的 @eyllanesc:即使很短,这条评论也应该是一个答案。因为,正如您所说,无法写入资源文件(因为它们被编译成可执行文件)。 【参考方案1】:

qresource 中保存的文件是只读的,因为它们是可执行文件的一部分,因此您无法编写或修改它们。

docs:

目前,Qt 总是将数据直接存储在可执行文件中,即使在 Windows、macOS 和 iOS 上,操作系统都为资源提供原生支持。 ...

【讨论】:

亲爱的@eyllanesc 非常感谢您的回答:) 我用您的出色回答将问题标记为已回答。虽然,我不想在一个问题中有两个问题,但是如果您发现这个问题的答案也很简单,请给我一个提示。实际上我的主要目的是如何编写代码来提示用户并将该用户键入的所需文本写入特定文件,然后读取它并在输出终端中显示它。我搜索了它,但我还没有完全找到它。 :( @Armin 将 ":/MyFiles/DocumentArminV.txt" 更改为 "DocumentArminV.txt"

以上是关于如何在 Qt 5 中写入和读取 QResource 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在QT中不断读取UDP数据包?

从文本文件读取,然后写入 QT 中的同一文件(高分功能)

如何使用 Qt/C++ 创建/读取/写入文件并使用程序在本地存储设置

QT读取文本文件

Qt怎么把QTableWidget表格中的数据读取出来

时序问题:QT 写入串行端口,然后读取