1

次の行:

qDebug() << "Result writeData : " << stream.writeRawData((const char *)&header, sizeof(header_t));

ディスクがいっぱいになっても、常に正の値を返します。なんで?ディスクがいっぱいであるためにwriteRawDataが失敗したときを検出する必要があります。

失敗することはないようですが、writeRawDataがフルディスクに書き込めないため、ファイルが破損しています。

だから質問:QStreamDataでディスクフルの問題を検出する方法(ところで、ステータスは常にOKを返します!)

ありがとうございました、

4

1 に答える 1

1

書き込まれたバイト数が要求したとおりであることを確認する必要があります。

それ以外に、そこでできることはあまりありません。基盤となる OS/ファイルシステムは「嘘をつく」ことができます。つまり、書き込みが完了した (キャッシュに保存された) と言うことができますが、後でそのファイルを拡張する余地がなくなったことがわかります。基になるファイル記述子が閉じられるか、強制的に同期されるまで、エラーはアプリケーションに報告されない場合があります。

その結果を呼び出しflush()て確認すると役立つ場合があります。それでも十分でない場合は、システム固有の呼び出しを使用して、少なくともファイルのオープン/クローズを自分で処理する必要があるでしょう。

于 2012-05-31T19:19:27.097 に答える