public void ReadHeader(string filePath)
 {
     using (var stream1 = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
     {
         stream1.Position = 0;
         using (var reader = new BinaryReader(stream1))
         {
             while (stream1.Position < FILE_HEADER_SIZE)
             {
                 Header = HeaderFromReader(reader);
             }
         }
     }
 }
        private static FILEHEADER HeaderFromReader(BinaryReader reader)
        {
            FILEHEADER result = new FILEHEADER();

            result.FileSignature                 = Encoding.UTF8.GetChars(reader.ReadBytes(4));
            result.FileSourceID                  = reader.ReadUInt16();
            result.GlobalEncoding                = reader.ReadUInt16();
            result.PIDData1                      = reader.ReadUInt32();
            result.PIDData2                      = reader.ReadUInt16();
            result.PIDData3                      = reader.ReadUInt16();
            result.PIDData4                      = reader.ReadBytes(8);
            result.VersionMajor                  = reader.ReadByte();
            result.VersionMinor                  = reader.ReadByte();
            result.SystemIdentifier               = Encoding.UTF8.GetChars(reader.ReadBytes(32));
            result.GeneratingSoftware            = Encoding.UTF8.GetChars(reader.ReadBytes(32));
            result.FileCreationDayofYear         = reader.ReadUInt16();
            result.FileCreationYear              = reader.ReadUInt16();
            result.HeaderSize                    = reader.ReadUInt16();
            result.OffsetToPointData             = reader.ReadUInt32();
            result.NumberOfVariableLengthRecords = reader.ReadUInt32();
            result.PointDataRecFormat            = reader.ReadByte();
            result.PointDataRecLength            = reader.ReadUInt16();
            result.LegacyNumberOfPointRecs       = reader.ReadUInt32();
            result.LegacyNumberOfPointByReturn   = reader.ReadBytes(20);
            result.XScaleFactor                  = reader.ReadDouble();
            result.YScaleFactor                  = reader.ReadDouble();
            result.ZScaleFactor                  = reader.ReadDouble();
            result.XOffset = reader.ReadDouble();
            result.YOffset = reader.ReadDouble();
            result.ZOffset = reader.ReadDouble();
            result.MaxX    = reader.ReadDouble();
            result.MaxY    = reader.ReadDouble();
            result.MaxZ    = reader.ReadDouble();
            result.MinX    = reader.ReadDouble();
            result.MinY    = reader.ReadDouble();
            result.MinZ    = reader.ReadDouble();
            result.StartOfWaveformDataPacketRec   = reader.ReadUInt64();
            result.StartOfFirstExtdVariableLenRec = reader.ReadUInt64();
            result.NumberOfExtdVariableLengthRecs = reader.ReadUInt32();
            result.NumberOfPointRecs      = reader.ReadUInt64();
            result.NumberOfPointsByReturn = reader.ReadBytes(120);
            return(result);
        }