2012-10-20 2 views
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() 메서드를 시도했지만 나에게 도움이되지 못했습니다. 이 구조체를 읽으면서 도와주세요.

+0

수동으로 일련 화하는 이유가 있습니까? – LightStriker

+0

"작동하지 않음"을 정의하십시오 - 무슨 일이 있었습니까? –

+0

@ Marc-AndréJutras 특별한 이유가 없습니다. 하나는 BinaryFormatter.Serialize를 사용하여 직렬화 할 수도 있지만 클래스에만 해당됩니다. 나는 구조체를 사용하고있다 ... –

답변

0

"읽기"코드는 "쓰기"코드의 역순이어야합니다. WriteChars로 작성하지 않았으므로 ReadChars를 사용하여 읽지 마십시오. Marshal.Copy 및 PtrToStructure를 사용하여 ReadBytes를 사용해야합니다.

"안전하지 않은"수준 (구조체, 마샬링 된 버퍼 등의 고정 버퍼)은 솔직히 매우 드물고 전문적입니다.이 문제가 지나치게 공학적 일 수 있습니다.

+0

좋아, 이제 ReadBytes를 사용할 것입니다. 귀하의 답변에 감사드립니다. 사실, 모두 감사합니다 :) –