Qt QFile возвращает несуществующий, но все еще открывается и записывает в файл

У меня есть этот файл, который находится на моем диске C, я знаю, что он существует. Когда я обращаюсь к нему с помощью QFile.exists(), он возвращает false, однако он все равно открывает файл и пишет в него, я просто не могу его прочитать. Я работаю над этим некоторое время и не могу найти решение, любые предложения приветствуются.

QFile tmpfile("C:/file.txt");
    QString tmpcontent;
    if(!QFile::exists("C:/file.txt"))
        qDebug() << "File not found"; // This is outputted
    if (tmpfile.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
        QTextStream stream(&tmpfile);
        stream << "test"; //this is written
        tmpcontent = tmpfile.readAll(); // this returns nothing
    }

1 ответ

Решение

Если файл не существует, он будет создан open, потому что вы делаете это в режиме записи.

readAll Функция возвращает все оставшиеся данные с устройства, так как вы просто пишете что-то, что у вас есть в конце файла, а данных нет, попробуйте seek( 0 ) вернуться к началу файла, а затем использовать readAll,

qDebug() << "File exists: " << QFile::exists("text.txt");
QFile test( "text.txt" );
if ( test.open( QIODevice::ReadWrite | QIODevice::Truncate ) ){
    QTextStream str( &test );
    str << "Test string";
    qDebug() << str.readAll();
    str.seek( 0 );
    qDebug() << str.readAll();
    test.close();
}else{
    qDebug() << "Fail to open file";
}

Как я вижу из вашего кода, вам нужен этот файл как временный, в таком случае я предлагаю использовать QTeoraryFile, он будет создан во временном каталоге (полагаю, что с разрешениями проблем не возникнет) с уникальным именем и будет автоматически удалено в объекте dtor.

Другие вопросы по тегам