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

Posted

技术标签:

【中文标题】Linux C++ Qt 修复“QIODevice::write:ReadOnly device”?【英文标题】:Linux C++ Qt fixing "QIODevice::write: ReadOnly device"? 【发布时间】:2017-05-17 16:10:55 【问题描述】:

所以问题是,我正在尝试使用 QFile 写入文件,但出现错误:

QIODevice::write: ReadOnly device

我的实现如下:

void logList::insert(QString data) 
    QString lin;
    QFile file1("log.data");
    file1.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream out("log.data");
    lin = out.readLine();
    out << data;
    file1.seek(30);
    file1.close();

我也试过

QIODevice::ReadWrite 

对于 open()

system("chmod 777 log.data");

那么如何在 linux 中读取和写入文件呢?

谢谢

【问题讨论】:

您的代码看起来有点奇怪。你有一个名为file1QFile,但你只有openseekclose 使用它——你从不写。 【参考方案1】:
QTextStream out("log.data");

接受字符串的QTextStream 构造函数不会打开文件,也不会处理使用该名称打开的文件。

相反,您应该将QFile 对象传递给QTextStream

QTextStream out(&file1);

另外,如果你想从文件中读取,这是行不通的

file1.open(QIODevice::WriteOnly | QIODevice::Text);

您需要使用QIODevice::ReadWrite 标志,而不是QIODevice::WriteOnly

最后,如果你使用QTextStream而不是QFile的读/写函数,最好seek with the QTextStream,而不是QFile对象

out.seek(30);

【讨论】:

以上是关于Linux C++ Qt 修复“QIODevice::write:ReadOnly device”?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 写入 xml:QIODevice::write (QFile, "D:/logs.xml"): 设备未打开

无法在 Qt C++ 程序中加载 qrc 文件

Qt 文件操作

Qt 输入输出设备和文件操作

QT文件读写

1-QT-文件操作