wczytanie danych z pliku binarnego do struktury

0

witam :)
Mam taki oto problem, dopiero zaczalem zabawe z C#, uzywam #develop. Otoz mam pliki binarne, niestety pisane jeszcze pod pascalem dosowym [nie przeze mnie] i chcialbym je wczytac. Stworzylem wiec strukture:

	[StructLayout(LayoutKind.Sequential, Pack = 1)]
	public struct Faktura
	{
		public ushort numer;
		public bool wspol;
		public Platnik platnik;
	}

	[StructLayout(LayoutKind.Sequential, Pack=1)]
	public unsafe struct Platnik
	{
		public ushort numer;
		public byte dNazwa;
		public fixed byte Nazwa[22];
		
	}

generalnei troche wiecej tego jest ale dla uproszczenia wklejam tylko te pola. No i znalazlem po dlugich i ciezkich mozolach funkcje ktora wczytuje dane binarne do struktury:

	public class Czytajka
	{
		public void Czytaj()
		{
			string nazwa = "MWST172.VAT";
			FileStream fs = new FileStream(nazwa,FileMode.Open);
			int size = Marshal.SizeOf(typeof(Faktura));
			int s1 = sizeof(ushort);
			byte[] bufor = new byte[size];
			fs.Read(bufor,0,bufor.Length);
		
			IntPtr ip = Marshal.AllocHGlobal(size);
			GCHandle gch = GCHandle.Alloc(ip, GCHandleType.Pinned);
			Marshal.Copy(bufor, 0, ip, size);
			Faktura f = (Faktura)Marshal.PtrToStructure(ip, typeof(Faktura));
			gch.Free();
			Marshal.FreeHGlobal(ip);
			fs.Close();
			Console.WriteLine("{0}",f.numer);
			Console.WriteLine(f.wspol.ToString());
			Console.WriteLine(f.platnik.numer.ToString());
		}
	}

i do tego w funkcji main:

	class Program
	{
		public static void Main(string[] args)
		{
			Czytajka c = new Czytajka();
			c.Czytaj();
			Console.ReadKey(true);
		}
	}

Problem polega na tym, ze pomimo dania alignment na 1 rozmiar jest odczytywany zle. Co ciekawe, zakomentowalem w strukturze faktura wszystko oprocz public bool i rozmiar owego boola wyniosl 4 bajty :-/ . Czy ktos napotkal moze na podobny problem albo wie jak mozna prosciej wczytac te dane binarne? :)

pozdrawiam, Mateusz

0

Bool może mieć 4 bajty , jeśli w pliku jest przeznacza na niego inna ilość bajtów
użyj innego typu o odpowiednim rozmiarze .

1 użytkowników online, w tym zalogowanych: 0, gości: 1