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 文件:<Dorms/>
.
@Seiggailion,尝试刷新驱动器D
的内容。此外,由于错误消失了,显然这个答案提供了解决方案,您可以将其标记为已接受。如果你喜欢它,你不妨考虑支持它。另一个建议是使用QXmlStreamWriter 创建 xml 文件。
我到处检查并尝试了不同的目录。只是没有文件【参考方案2】:
问题可能是您没有在使用的目录 D:/ 中创建文件的访问权限。检查网址和权限。
附:对我来说这个例子是正确的
【讨论】:
Qt 或代码中是否有一些特殊的权限设置?我使用 Windows,只要知道我有权创建文件【参考方案3】:您可以通过在file.open()
失败后调用file.errorString()
来获得确切的错误消息。我猜,可能是访问权限错误。
【讨论】:
我得到这个错误:“没有这样的文件或目录”。 您是否尝试在其他磁盘或目录中打开?以上是关于Qt 写入 xml:QIODevice::write (QFile, "D:/logs.xml"): 设备未打开的主要内容,如果未能解决你的问题,请参考以下文章