static bool SkipRecord(BinaryReader br, Endian endian, HeaderWidth width) { byte[] b1 = new byte[(int)width]; byte[] b2 = new byte[(int)width]; if (br.Read(b1, 0, (int)width) < (int)width) return false; if (endian != Endian.Little) b1 = b1.Reverse().ToArray(); Int32 n1 = BitConverter.ToInt32(b1, 0); br.ReadBytes(n1); if (br.Read(b2, 0, (int)width) < (int)width) return false; if (endian != Endian.Little) b2 = b2.Reverse().ToArray(); Int32 n2 = BitConverter.ToInt32(b2, 0); if (n1 != n2) throw new ArgumentException("FORTRAN RECORD READ: Record end/start missmatch"); return true; }
public void Initialise() { _initialised = false; _endian = Endian.Little; _width = HeaderWidth.H64; if (!CanReadValidTitle()) { _endian = Endian.Big; if (!CanReadValidTitle()) { _width = HeaderWidth.H32; if (!CanReadValidTitle()) { _endian = Endian.Little; if (!CanReadValidTitle()) throw new ArgumentException("SELAFIN IMPORT: Invalid file (Endian/Machine?)"); } } } using (FileStream fs = File.OpenRead(_selafinFile.FullName)) { using (BinaryReader br = new BinaryReader(fs)) { ReadHeader(br); } } _initialised = true; }