2016-07-05 7 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

'exists'関数はフォワードスラッシュを処理しませんが、' open'関数はパスをシステムに渡すだけです。おそらく。 –

+1

ファイルの[アクセス許可](http://msdn.microsoft.com/en-us/library/bb727008.aspx)を確認しましたか?可能であれば、あなたは書き込み権限しか持っていません。これは少なくともreadAll部分を説明しますが、Qtが読み込みを試みて存在をチェックしていれば... – Aconcagua

答えて

0

ファイルが存在しない場合、書き込みモードで実行されるため、ファイルはopenによって作成されます。

readAll機能は、あなたがちょうどあなたがファイルの末尾に現在、そしてデータが存在しない何かを書くために、ファイルのbeginnigに戻り、その後、readAllを使用するseek(0)にしようと、デバイスから残りのすべてのデータを返します。

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で自動的に削除されます。

関連する問題