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 ответ
Если файл не существует, он будет создан open, потому что вы делаете это в режиме записи.
readAll
Функция возвращает все оставшиеся данные с устройства, так как вы просто пишете что-то, что у вас есть в конце файла, а данных нет, попробуйте seek( 0 )
вернуться к началу файла, а затем использовать 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";
}
Как я вижу из вашего кода, вам нужен этот файл как временный, в таком случае я предлагаю использовать QTeoraryFile, он будет создан во временном каталоге (полагаю, что с разрешениями проблем не возникнет) с уникальным именем и будет автоматически удалено в объекте dtor.