1

ハードウェアユニットでいくつかのテストを実行し、各テストの結果とテストを実行するために実行した手順の両方をログに記録するプログラムを作成しています。秘訣は、プログラムが利用可能になったときにこれらの結果をテキストファイルに記録することです。これにより、プログラムがクラッシュしても、取得した結果が失われることはなく、ログはクラッシュのデバッグに役立ちます。

たとえば、2つのテストで構成されるプログラムを想定します。プログラムが最初のテストを終了し、2番目のテストに取り組んでいる場合、ログファイルは次のようになります。

Results:
Test 1 Result A: Passed
Test 1 Result B: 1.5 Volts

Log:
Setting up instruments.
Beginning test 1.
[Steps in test 1]
Finished test 1.
Beginning test 2.
[whatever test 2 steps have been completed]

2番目のテストが終了すると、ログファイルは次のようになります。

Results:
Test 1 Result A: Passed
Test 1 Result B: 1.5 Volts
Test 2 Result A: Passed
Test 2 Result B: 2.0 Volts

Log:
Setting up instruments.
Beginning test 1.
[Steps in test 1]
Finished test 1.
Beginning test 2.
[Steps in test 2]
Finished test 2.
All tests complete.

どうすればこれを行うことができますか?QFileとQTextStreamのヘルプファイルを見てきましたが、既存のテキストの途中にテキストを挿入する方法がわかりません。クラッシュした場合に別々のファイルになってしまうので、別々のファイルを作成して最後にそれらをマージしたくありません。また、変更を加えるたびにファイルを最初から書きたくありません。これを行うには、より高速でエレガントな方法があるはずだからです。

4

4 に答える 4

2

QFile.readAllは、ファイル全体をQByteArrayに読み込みます。次に、QByteArrayで、挿入を使用してテキストを中央に挿入し、それをファイルに再度書き戻すことができます。

または、ファイルポインタを使用して途中でファイルを変更できる従来のcスタイルを使用することもできます。

于 2012-08-14T19:18:23.560 に答える
2

@Rokuが指摘したように、リライトを使用してファイルにデータを挿入する方法は組み込まれていません。ただし、領域のサイズがわかっている場合、つまり、書き込みたいテキストの長さが固定されている場合は、ファイルに空のスペースを書き込んで、後で置き換えることができます。ファイルの一部を上書きする際は、この説明を確認 してください。

于 2012-08-14T19:21:00.223 に答える
1

私は、質問で躊躇していると述べた「ファイルを最初から作成する」方法を採用することになりました。この手法の利点は、ログと結果が最初から別のファイルに配置されることがないため、クラッシュが発生した場合でも、単一のファイルになることです。さらに、ファイルの書き換えは、新しい結果を追加する場合にのみ発生します(まれにしか発生しません)が、ログの更新は、通常どおりファイルにテキストを追加することを意味します。OSにテキストをファイルに挿入させる方法がないことにまだ少し驚いています。

ああ、そして絶対にこの機能をできるだけ効率的に持たなければならない人のために、以下が役に立つかもしれません:http: //www.codeproject.com/Articles/17716/Insert-Text-into-Existing-Files-in -C-Tempなし

于 2012-08-27T21:22:21.880 に答える
0

ファイルの途中に追加することはできません。結果用とログ用の2つの別々のファイルを使用します。

于 2012-08-14T18:31:23.503 に答える