2016-07-05 279 views
1

我有这个文件位于我的C盘,我知道它存在。当我用QFile.exists()访问它时,它返回false,但它仍然打开文件并写入它,我只是不能读取它。我一直在这个工作一段时间,找不到解决方案,任何建议表示赞赏。Qt QFile返回不存在但仍然打开并写入文件

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

Mabe'exists'函数不处理正斜杠,而'open'函数只是将路径传递给系统。也许。 –

+1

您是否检查过文件本身的[permissions](http://msdn.microsoft.com/zh-cn/library/bb727008.aspx)?可能,您只能写入权限。这至少会解释readAll部分,但如果Qt通过尝试读取来检查存在... – Aconcagua

回答

0

如果文件不存在,它将通过打开创建,因为您在写模式下执行此操作。

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中自动删除。

相关问题