protected override bool ReadFile(BinaryReader r) { var length = (int)r.BaseStream.Length; if (length < 8) { throw new InvalidDataException("File is too short to contain even a header", null); } byte[] bytes = r.ReadBytes((int)length); var head = new ArraySegment <byte>(bytes, 0, 8); if (!Header.Read(head)) { throw new InvalidDataException("File does not contain a valid header", null); } if (bytes.Length < (8 + (Header.FrameCount * 24))) { throw new InvalidDataException("File is too short to contain enough frame headers", null); } for (var i = 0; i < Header.FrameCount; ++i) { var seg = new ArraySegment <byte>(bytes, 8 + (i * 24), 24); var fh = new FrameHeader(); if (fh.Read(seg)) { FrameHeaders.Add(fh); } else { throw new InvalidDataException(String.Format("File does not contain a valid frame header #{0}", i), null); } } foreach (var h in FrameHeaders) { if (h.Offset > length) { throw new InvalidDataException(String.Format("File is too short to contain a valid frame (at {0} bytes)", h.Offset), null); } var len = (int)(length - h.Offset); var seg = new ArraySegment <byte>(bytes, (int)h.Offset, len); if (!h.ProcessBytes(seg)) { throw new InvalidDataException(String.Format("File does not contain a valid frame (at {0} bytes)", h.Offset), null); } } return(true); }
protected override bool ReadFile(BinaryReader r) { var length = (int)r.BaseStream.Length; if (length < 8) { throw new InvalidDataException("File is too short to contain even a header", null); } byte[] bytes = r.ReadBytes((int)length); var head = new ArraySegment<byte>(bytes, 0, 8); if (!Header.Read(head)) { throw new InvalidDataException("File does not contain a valid header", null); } if (bytes.Length < (8 + (Header.FrameCount * 24))) { throw new InvalidDataException("File is too short to contain enough frame headers", null); } for (var i = 0; i < Header.FrameCount; ++i) { var seg = new ArraySegment<byte>(bytes, 8 + (i * 24), 24); var fh = new FrameHeader(); if (fh.Read(seg)) { FrameHeaders.Add(fh); } else { throw new InvalidDataException(String.Format("File does not contain a valid frame header #{0}", i), null); } } foreach (var h in FrameHeaders) { if (h.Offset > length) { throw new InvalidDataException(String.Format("File is too short to contain a valid frame (at {0} bytes)", h.Offset), null); } var len = (int)(length - h.Offset); var seg = new ArraySegment<byte>(bytes, (int)h.Offset, len); if (!h.ProcessBytes(seg)) { throw new InvalidDataException(String.Format("File does not contain a valid frame (at {0} bytes)", h.Offset), null); } } return true; }