Search code examples
c++qtqfile

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


I have this file which is located in my C drive, I know it exists. When I access it with QFile.exists() it returns false, however it still opens the file and writes to it, I just cant read it. I've been working on this for a while and cannot find a solution, any suggestions are appreciated.

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
    }

Solution

  • If file is not exist it will be created by open because you do it in write mode.

    readAll function return all remaining data from device, since you just write something you are currently at the end of a file, and there is no data, try to seek( 0 ) to return to the beginnig of a file and then use 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";
    }
    

    As I can see from your code you need that file as a temporary, in such case I suggest to use QTemporaryFile, it will be created in temp directory (I belive there will be no problem with permissions), with unique name and will be auto deleted in object dtor.