【问题标题】:Qt writting to xml: QIODevice::write (QFile, "D:/logs.xml"): device not openQt 写入 xml:QIODevice::write (QFile, "D:/logs.xml"): 设备未打开
【发布时间】: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";
}

有谁知道我做错了什么?

【问题讨论】:

    标签: c++ xml windows qt


    【解决方案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() 来获得确切的错误消息。我猜,可能是访问权限错误。

    【讨论】:

    • 我得到这个错误:“没有这样的文件或目录”。
    • 您是否尝试在其他磁盘或目录中打开?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2015-10-27
    • 2011-03-29
    • 1970-01-01
    • 2014-10-24
    • 2018-08-13
    相关资源
    最近更新 更多