Запись Qt в xml: QIODevice :: write (QFile, "D: /logs.xml"): устройство не открыто - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь сохранить данные в файл XML в Qt.Повсюду говорят, что мне нужно написать такой вид проверки:

if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
    qDebug() << "Failed to open";
}
else
{
    //write to file;
}

Я всегда получаю результат "не удалось открыть".Я просто не могу ничего найти по этому поводу.Если я не использую эту проверку, я получаю такую ​​ошибку: QIODevice :: write (QFile, "D: /logs.xml"): устройство не открыто.Я просто не знаю, что делать.Вот весь код, который я пытался использовать из учебника:

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";
}

Кто-нибудь знает, что я делаю неправильно?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Точное сообщение об ошибке можно получить, позвонив file.errorString() после сбоя file.open().Я думаю, это, вероятно, ошибка прав доступа.

0 голосов
/ 02 октября 2018

Причина

Вы используете неправильные косые черты для Windows.

Решение

Изменить

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

на

file.setFileName("D:\logs.xml");
0 голосов
/ 02 октября 2018

Проблема может заключаться в том, что у вас нет прав доступа для создания файлов в используемом каталоге D: /.Проверьте URL-адрес и разрешения.

PS для меня этот пример правильный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...