バイナリ ファイルの途中でいくつかの操作を行い (文字列値、ブール値、または int32 を変更)、他のすべてをそのままにしておく必要があります。処理する必要のないアイテムをすばやくスキップして、すべてのバイナリ オブジェクトを処理せずに必要なものをすぐに取得するにはどうすればよいですか (それらの多くがあり、処理が遅い)。
2 に答える
1
これは完全にファイルの構造に依存します。実際、値を変更できるかどうかは、ファイルの構造によって異なります。ファイルを大きくしたり小さくしたりする変更を加える必要がある場合は、できる限り新しいファイルを作成する必要があります。ファイルの途中からバイトを挿入または削除するだけではありません。
ファイルのレコード形式が固定長の場合は、Stream.Position
プロパティを使用するなどして、シークすることで適切な場所にスキップできます。ファイルの形式が固定長でない場合は、すべてを完全に処理する必要があります。各レコードの長さが接頭辞として付けられている「中間」の可能性があります。実際にすべてを処理する必要はありませんが、各レコードのヘッダーを読み取ってスキップする必要があります。
于 2012-10-30T07:00:45.813 に答える
0
ストリームにはSeek関数があります。おそらく、変更したい位置にSeekしてから、Writeメソッドを使用してファイルを変更することができますか?ただし、単にバイトを置き換えるのではなく、途中でバイトを追加する必要がある場合は、問題が発生する可能性があります。そのような場合、(既存のコンテンツをオフセットするために)ファイルの残りの部分を書き換える必要があります。
于 2012-10-30T07:02:33.113 に答える