Qt QFile return 不存在但仍然打开并写入文件

Qt QFile return non existent but still opens and writes to file

我有这个文件,它位于我的 C 盘中,我知道它存在。当我使用 QFile.exists() 访问它时,它 returns 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
    }

如果文件不存在,它将由 open 创建,因为您是在写模式下创建的。

readAll 函数 return 设备的所有剩余数据,因为你只是写了一些你当前在文件末尾的东西,没有数据,尝试 seek( 0 )到 return 到文件的开头,然后使用 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";
}

从你的代码中我可以看出你需要那个文件作为临时文件,在这种情况下我建议使用 QTemporaryFile,它将在临时目录中创建(我相信权限不会有问题), 具有唯一名称,将在对象 dtor 中自动删除。