C# 구조체 배열을 파일로 저장하고 파일에서 분석하는 방법

2737 단어 c#
C# 구조체 배열을 파일로 저장하고 파일에서 분석하는 방법
  public struct  USER_RECORD
        {
            public uint nGroupID;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
            public byte[] szUserID;
            public uint nFinger;
            public uint nInstances;
            public VCOMWrapper.MX00_TEMPLATE_INSTANCE[] instanceRecords;
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct MX00_TEMPLATE_INSTANCE
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2048)]
            public byte[] p378Template;
        }

List ps = new List();
지금 ps를 파일로 저장하고 다음 파일에서 ps를 정확하게 해석할 수 있습니까?
구조체 USERRECORD는 instance Records가 없으면 이 구조체를 Byte[]로 변환해서 파일에 쓰고 해석할 때 파일byte[]를 읽고 구조체로 변환할 수 있지만 지금은 VCOMWrapper가 있습니다.MX00_TEMPLATE_INSTANCE[], 구조체를 Byte[]로 전환하는 데 실패했습니다.
해결책----------------------------
서열화는 비교적 간단하게 쓴다
http://www.cnblogs.com/yzenet/p/3622833.html
해결책----------------------------

        public static void Serialize(USER_RECORD rec, string path)         {            using (BinaryWriter wr = new BinaryWriter(File.OpenWrite(path)))             {                 Serialize(rec, wr);             }         }         public static USER_RECORD Deserialize(string path)         {             using (BinaryReader rd = new BinaryReader(File.OpenRead(path)))             {                 return Deserialize(rd);             }         }         private static void Serialize(USER_RECORD rec, BinaryWriter output)         {             output.Write(rec.nGroupID);             WriteByteArray(rec.szUserID, output);             output.Write(rec.nFinger);             output.Write(rec.nInstances);             if (rec.nInstances > 0)             {                 MX00_TEMPLATE_INSTANCE[] array = rec.instanceRecords;                 Debug.Assert(array != null && array.Length == rec.nInstances);                 for (int i = 0; i = 0)             {                if (len > 0)                     return input.ReadBytes(len);                 else                     return new byte[0];             }             else                return null;         }         private static USER_RECORD Deserialize(BinaryReader input)         {             USER_RECORD rec = new USER_RECORD();             int len;             rec.nGroupID = input.ReadUInt32();             rec.szUserID = ReadByteArray(input);             rec.nFinger = input.ReadUInt32();             len = (int)(rec.nInstances = input.ReadUInt32());             MX00_TEMPLATE_INSTANCE[] array = new MX00_TEMPLATE_INSTANCE[len];             for (int i = 0; i    return rec;
        }

좋은 웹페이지 즐겨찾기