C++使用 qfile 写入资源文件 (QIODevice::write (QFile, "x" ): 设备未打开)

C++ write to resource file with qfile (QIODevice::write (QFile,"x"): device not open)

本文关键字:write qfile 使用 资源 C++ QIODevice 源文件 QFile      更新时间:2023-10-16

我有以下问题,我有一个名为data.txt的资源文件,我想用写权限打开它。我使用QFile和QTextStream来处理它。我只能用ReadOnly访问打开文件,但不能用ReadWrite或WriteOnly访问打开。导出具有类似代码的函数可以很好地工作,只是不能处理资源文件。

我已经尝试过将前斜杠更改为双反斜杠,我运行了无数次qmake并重新生成,我重新启动了我的计算机并重新生成了资源文件。我已经在Stack上检查了很多条目,但没能找到一个能解决我问题的条目。(大多数问题都是拼写问题,比如只有一个反斜杠)。

QFile file(":/savelocation/data.txt");
if (!file.exists())
{
qDebug()<<"File not exist";
}
file.open(QIODevice::ReadWrite | QIODevice::Text);
if (file.isOpen())
{
qDebug()<<"File is open";
QTextStream out(&file);
out<< "something" << endl;
}
else
{
qDebug()<<"File is not open";
}
file.close();
file.open(QIODevice::ReadOnly);
if (file.isOpen())
{
qDebug()<<"File is open as read only";
}
else
{
qDebug()<<"File is not open as read only";
}
file.close();

实际结果:

我的应用程序输出的代码:文件未打开文件以只读方式打开它只可能为我打开只读。

在我实现if之前,我得到了以下输出:

QIODevice::write (QFile,":/savelocation/data.txt"): device not open

预期结果:

该文件将以写访问权限打开。

提前谢谢。

根据文档,资源嵌入在二进制文件中,因此在概念上和实践上都是只读的。您必须将数据保存到文件系统上的可写位置,例如QDir::home()或当前工作目录QDir::current()下。