私はバイト配列のコレクションに読んでいるバイナリファイルを持っています。バイナリファイルをバイト配列に読み込む方法は?
ファイルには、複数(任意の数)のレコードが含まれています。基本的にバイトのブロック。各レコードは任意の長さです。
ファイルのヘッダには、各レコードのオフセットを提供します。
record 0: offset 2892
record 1: offset 4849
....
record 98: offset 328932
record 99: offset 338498
ループを実行し、各レコードをバイト配列に読み込むコードを記述しました。オフセットの違いを見ると、レコードサイズがわかります。オフセットのシークとReadBytes()への呼び出しは、レコードをその配列に読み込みます。
私の現在の不完全な解決策は、最後のレコードのために動作しません。あなたはその最後のレコードをどのように配列に読み込みますか(それは任意の長さであることに注意してください)。
なぜですか?各レコードは暗号化されており、別々に解読する必要があります。私はバイト配列に各レコードを読むコードを書いています。それを解読し、すべてのレコードをファイルに書き戻します。
コードは、要求に応じて追加:
//recordOffsets contain byte location of each record start. All headers (other than universal header) are contained within record 0.
recordBlocks = new List<RecordBlock>();
//store all recordOffsets. Record0 offset will be used to load rest of headers. Remaining are used to parse text of eBook.
for (int i = 0; i < standardHeader.numRecs; i++)
{
RecordBlock r = new RecordBlock();
r.offset = bookReader.ReadInt32(EndianReader.Endian.BigEndian);
r.number = bookReader.ReadInt32(EndianReader.Endian.BigEndian);
recordBlocks.Add(r);
}
foreach (RecordBlock r in recordBlocks)
{
if (r.number == recordBlocks.Count)
{
///deal with last record
}
else
{
r.size = recordBlocks[(r.number) + 1].offset - r.offset;
}
bookReader.Seek(r.offset, SeekOrigin.Begin);
r.data = bookReader.ReadBytes(r.size);
}
コードを投稿してください。 – TalentTuner
これまでのコードを表示できますか? – Aamir