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

Posted

技术标签:

【中文标题】Qt 写入 xml:QIODevice::write (QFile, "D:/logs.xml"): 设备未打开【英文标题】:Qt writting to xml: QIODevice::write (QFile, "D:/logs.xml"): device not open 【发布时间】:2018-10-02 13:53:05 【问题描述】:

我正在尝试将数据保存到 Qt 中的 XML 文件。到处都被告知我需要编写这样的检查:

if (!file.open(QIODevice::WriteOnly | QIODevice::Text))

    qDebug() << "Failed to open";

else

    //write to file;

我总是得到“无法打开”的结果。我只是找不到任何关于它的东西。如果我不使用此检查,我会收到这种错误:QIODevice::write (QFile, "D:/logs.xml"): device not open。我只是不知道该怎么办。这是我在教程中尝试使用的整个代码:

QDomDocument document;
// Making the root element
QDomElement root = document.createElement("Dorms");

// Adding the root element to the docuemnt
document.appendChild(root);
QFile file;
file.setFileName("D:/logs.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))

    qDebug() << "Failed to open";

else

    QTextStream stream(&file);
    stream << document.toString();
    file.close();
    qDebug() << "Done";

有谁知道我做错了什么?

【问题讨论】:

【参考方案1】:

原因

您在 Windows 上使用了错误的斜杠。

解决方案

改变

file.setFileName("D:/logs.xml");

file.setFileName("D:\logs.xml");

【讨论】:

现在它没有显示任何错误,但文件永远找不到 @Seiggailion,你在输出控制台上得到“完成”了吗? @Seiggailion,我刚刚测试过它并且它有效。我得到一个包含内容的 xml 文件:&lt;Dorms/&gt;. @Seiggailion,尝试刷新驱动器D的内容。此外,由于错误消失了,显然这个答案提供了解决方案,您可以将其标记为已接受。如果你喜欢它,你不妨考虑支持它。另一个建议是使用QXmlStreamWriter 创建 xml 文件。 我到处检查并尝试了不同的目录。只是没有文件【参考方案2】:

问题可能是您没有在使用的目录 D:/ 中创建文件的访问权限。检查网址和权限。

附:对我来说这个例子是正确的

【讨论】:

Qt 或代码中是否有一些特殊的权限设置?我使用 Windows,只要知道我有权创建文件【参考方案3】:

您可以通过在file.open() 失败后调用file.errorString() 来获得确切的错误消息。我猜,可能是访问权限错误。

【讨论】:

我得到这个错误:“没有这样的文件或目录”。 您是否尝试在其他磁盘或目录中打开?

以上是关于Qt 写入 xml:QIODevice::write (QFile, "D:/logs.xml"): 设备未打开的主要内容,如果未能解决你的问题,请参考以下文章

QT开发(四十四)——流方法解析XML

Qt Write and Read XML File 读写XML文件

使用 XML 模式类型进行 Qt GUI 输入验证

为树视图创建 Qt 模型

1-QT-文件操作

Qt中的空文件