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 中自动删除。
我有这个文件,它位于我的 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 中自动删除。