[DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadFile(SafeHandle hFile, out Form1.usrData lpBuffer, int nNumberOfBytesToRead, out int lpNumberOfBytesRead, IntPtr lpOverlapped); var lst = new List<Form1.usrData>(); int structSize = Marshal.SizeOf(typeof(Form1.usrData)); using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { while (true) { if (ReadFile(fs.SafeFileHandle, out Form1.usrData data, structSize, out int readedSize, IntPtr.Zero)) { if (readedSize < structSize) break; lst.Add(data); } else { throw new Win32Exception(); } } }