Я пытаюсь получить доступ к простому текстовому файлу из приложения Qt-widget с классом QFile для чтения записи. Чтение файла по строкам в виде строки отлично работает. Но открытие его, готового к написанию, терпит неудачу. Следующий код проверяет, существует ли файл и пытается установить соответствующие разрешения, но в конце файл не открывается. Вот неисправная часть кода:Qt: невозможно открыть файл для записи
#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
MainWindow w;
w.show();
QFile file(":/test.dat");
qDebug() << "exists? " << file.exists();
qDebug() << "writable? " << file.isWritable();
qDebug() << "permissions before? " << file.permissions();
qDebug() << "permissions set? " << file.setPermissions(QFileDevice::WriteOther | QFileDevice::ReadOther);
qDebug() << "permissions after? " << file.permissions();
qDebug() << "opened? " << file.open(QIODevice::Append);
qDebug() << "errors? " << file.errorString();
qDebug() << "errnum? " << file.error();
QTextStream out(&file);
out << "something to append";
file.close();
return app.exec();
}
Qt возвращает это сообщение:
exists? true
writable? false
permissions before? QFlags(0x4|0x40|0x400|0x4000)
permissions set? false
permissions after? QFlags(0x4|0x40|0x400|0x4000)
opened? false
errors? "Unknown error"
errnum? 5
QIODevice::write (QFile, ":/test.dat"): device not open
Если изменить параметр в открытой функции QIODevice::ReadOnly
файл может считываться без проблем, в противном случае с QIODevice::WriteOnly
, Почему одно и тоже не работает для написания? Это разрешение? И почему не разрешаются изменения после того, как я позвонил setPermissions
? Я запускаю Qt как root на Ubuntu 14.04. И test.dat
имеет полные права -rwxrwxrwx
, принадлежащие пользователю. Может кто-нибудь помочь? Спасибо!
Как я уже говорил, это не работает для меня. Я пробовал все OpenModeFlags, которые позволяли бы писать, но никто из них не работает. – zufall
О, да, я пропустил. Попробуйте полностью освоить путь к ОС. Нет ~ и нет:/«Последнее может быть интерпретировано как внутренний ресурс Qt (просто догадка). Попробуйте поставить этот файл в другое место. – AlexanderVX
Спасибо, за подсказку. Я использовал полный путь к ОС. измените права вручную, чтобы разрешения оставались таким образом в приложении Qt, но, к сожалению, файл все еще не может быть открыт для записи. – zufall