to Partizan - большое спасибо за совет - эт то что надо)))) - вроде все получилось :
функция преобразования из файла в структуру:
| Код | { TEMPER temp2 = new TEMPER(); byte[] buf1 = new byte[Marshal.SizeOf(temp2)]; IntPtr tp = Marshal.AllocHGlobal(Marshal.SizeOf(temp2)); try { Stream stream1 = new FileStream("E:\\temperature.bin", FileMode.Open, FileAccess.Read, FileShare.None); stream1.Seek((Marshal.SizeOf(temp2))*4, SeekOrigin.Begin); stream1.Read(buf1, 0, buf1.Length); Marshal.Copy(buf1, 0, tp, buf1.Length); temp2 = (TEMPER)Marshal.PtrToStructure(tp, typeof(TEMPER)); this.label1.Text = (temp2.tempr_air).ToString(); stream1.Close();
} finally { Marshal.FreeHGlobal(tp); }
}
|
и наоборот - из структуры в байтовый массив и записи в файл :
| Код | { TEMPER temp1 = new TEMPER(); byte[] buf = new byte[Marshal.SizeOf(temp1)]; IntPtr tp = Marshal.AllocHGlobal(Marshal.SizeOf(temp1)); try { Random fixRand = new Random(); temp1.tempr_air = (short)((fixRand.Next()) % 11 + 391); Marshal.StructureToPtr(temp1, tp, false); Marshal.Copy(tp, buf, 0, buf.Length); Stream stream1 = new FileStream("E:\\temperature.bin", FileMode.Append, FileAccess.Write, FileShare.None); stream1.Write(buf, 0, buf.Length); stream1.Close(); } finally { Marshal.FreeHGlobal(tp); } }
|
и что особо радует - удалось избежать использования unsafe кода )) |