我有这个位于我的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
}
答案 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中自动删除。