1

私は次の構造体を持っています:

unsafe struct Locomotive
{
    public fixed char locotype[6];
    public int roadno,HP;
}

これをバイナリファイルに正常に書き込みました。コードは次のとおりです。

Locomotive l1 = new Locomotive();
for (int i = 0; i <= 5; i++)
{
    l1.locotype[i] = textBox1.Text[i];
}
l1.roadno = int.Parse(textBox2.Text);
l1.HP = int.Parse(textBox3.Text);
BinaryWriter bw = new BinaryWriter(File.Open(@"C:\Documents and Settings\Ruchir Sharma\Desktop\Locodata.bin", FileMode.Append));
IntPtr ip = Marshal.AllocHGlobal(Marshal.SizeOf(l1));
Marshal.StructureToPtr(l1, ip, true);
Byte[] b1 = new Byte[Marshal.SizeOf(l1)];
Marshal.Copy(ip, b1, 0, b1.Length - 1);
bw.Write(b1);
MessageBox.Show("Data written successfully");
Marshal.FreeHGlobal(ip);
bw.Close();

さて、この構造体を読んでいるときに、文字配列、つまり locotype[6] が問題を引き起こしています。メソッド BinaryReader.ReadChars() を試しましたが、うまくいきませんでした。この構造体を読むのを手伝ってください。

4

1 に答える 1

0

「読み取り」コードは、「書き込み」コードの逆でなければなりません。WriteChars で書いていないので、ReadChars を使用して読み取らないでください。ReadBytes を使用してから、Marshal.Copy と PtrToStructure を使用する必要があります。

ただし、率直に言って、このレベルの「安全でない」(構造体、マーシャルなどの固定バッファー) は非常にまれであり、特殊化されています。

于 2012-10-20T07:21:18.147 に答える