BinaryWriter を使用してデータをログ ファイルに書き込みます。
ただし、BinaryReader を使用して (ループ内で) データを取得すると、最初の 3 つの書き込み (integer、integer、byte[]) を読み取ることができますが、別の 3 つを読み取るためのループ内の次の反復では、残りのデータ(そして私はそれを処理できません)。
コードは次のとおりです。
コードを書く:
writer.Write(header.StructID);
writer.Write(data.Length);
writer.Write(data);
コードを読む:
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (BinaryReader br = new BinaryReader(fs))
{
long bytesRead = 0;
long readerLen = br.BaseStream.Length;
//read 1st record
int id = br.ReadInt32();
int len = br.ReadInt32();
byte[] data = br.ReadBytes(len);
bytesRead += (sizeof(int) * 2) + data.Length;
while (bytesRead < readerLen)
{
//TODO:process data
//read next
id = br.ReadInt32();
len = br.ReadInt32();
data = br.ReadBytes(len);
bytesRead += (sizeof(int) * 2) + data.Length;
}
}
}
解決にご協力をお願いいたします。
編集:
バイナリ書き込みコードを using ステートメントで囲み、1 回だけ実行できるようにしたので、書き込まれたバイト数が正確にわかります。読み取りコードを処理すると、basestream.length がかなり大きくなります (つまり、80 バイトを書き込み、basestream.length は 1144 を示します)。
using (writer = new BinaryWriter(File.Open(filename, FileMode.OpenOrCreate)))
{
long pos = writer.BaseStream.Position;
writer.Write(header.StructID);
writer.Write(data.Length);
writer.Write(data);
m_LoggingEnabled = false;
}
バイナリデータは次のとおりです。
CE 00 00 00 48 00 00 00 AD A2 3B 94 76 08 A7 3E 7A 9A 80 9D CC 1A 2B 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 BF 91 01 00 00 00 00 00 00 00 00 00 00 00 00 F0 3F 01 00 00 00 00 00 00 00 CE 00 00 00 48 00 00 00 AD A2 3B 94 76 08 A7 3E 7A 9A 80 9D CC 1A 2B 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 BF 92 01 00 00 00 00 00 00 00 00 00 00 00 2A 7A BE 01 00 00 00 50 64 63 3D CE 00 00 00 48 00 00 00 D8 41 B1 19 01 A3 86 BE E2 E2 7A 22 6F 1F 2B 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 BF 91 01 00 00 00 00 00 00 00 00 00 00 00 00 F0 3F 01 00 00 00 00 00 00 00
私は今本当に混乱しています!