读取包含字符数组的结构

时间:2012-10-20 07:09:23

标签: c# arrays struct char binaryreader

我有以下结构:

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()方法,但它对我没用。请帮我阅读这个结构。

1 个答案:

答案 0 :(得分:0)

您的“读取”代码应与“写入”代码相反。您没有使用WriteChars编写它,因此不要使用ReadChars来读取它。您应该使用ReadBytes,然后使用Marshal.Copy和PtrToStructure。

但坦率地说,这种“不安全”(结构中的固定缓冲区,Marshal等)是非常罕见且专门的 - 我担心你可能会过度设计这个。