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

时间:2016-07-05 04:33:57

标签: c++ 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 个答案:

答案 0 :(得分:0)

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

readAll函数返回设备中的所有剩余数据,因为您只是写了一个当前位于文件末尾的内容,并且没有数据,请尝试seek( 0 )返回到beginnig一个文件,然后使用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中自动删除。