QIODevice::write : 设备未打开

Posted

技术标签:

【中文标题】QIODevice::write : 设备未打开【英文标题】:QIODevice::write : device not open 【发布时间】:2017-09-02 07:39:42 【问题描述】:

我最近一直在尝试使用 Qt 构建一个纸牌游戏,但我遇到了一个非常奇怪的错误。

QFile file(":/file/02");
file.open(QIODevice::ReadWrite|QIODevice::Truncate);

第二行的返回值为false。因此,当我尝试读取或写入文件时,会引发此异常。 但是,该文件确实存在,并且项目中的一个qrc文件是这样写的:

<qresource prefix="/file">
<file alias="01">data.json</file>
<file alias="02">deck.json</file>

添加这个 qrc 文件后,我也运行了 qmake,但一切都保持不变。我该如何解决?非常感谢。

【问题讨论】:

【参考方案1】:

根据docs:

Qt资源系统是一种独立于平台的存储机制 应用程序的可执行文件中的二进制文件。如果您的 应用程序总是需要一组特定的文件(图标、翻译 文件等),并且您不想冒丢失文件的风险。

因为它是资源的一部分,所以文件是只读的,所以如果你用写权限打开它,它总是会返回 false。

简而言之,存储在 .qrc 中的文件是静态的。

【讨论】:

总是有未读的文档可以解释问题...谢谢 :)

以上是关于QIODevice::write : 设备未打开的主要内容,如果未能解决你的问题,请参考以下文章

Qt 文件操作

文件打开时出现“QIODevice::write: device not open”

QTcpSocket::write - 如何写入大文件?

Linux C++ Qt 修复“QIODevice::write:ReadOnly device”?

QTcpSocket bytesAvailable() = 0

XBOXONE 手柄蓝牙接收器驱动哪里有啊?