private void ReadHeader() { byte[] buffer = this.reader.ReadBytes(Marshal.SizeOf(typeof(DBFHeader))); // Marshall the header into a DBFHeader structure GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); this.header = (DBFHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(DBFHeader)); handle.Free(); this.fields = new List <DBFFieldDescriptor>(); while (this.reader.PeekChar() != 13) { buffer = this.reader.ReadBytes(Marshal.SizeOf(typeof(DBFFieldDescriptor))); handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); var fieldDescriptor = (DBFFieldDescriptor)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(DBFFieldDescriptor)); if ((fieldDescriptor.Flags & DBFFieldFlags.System) != DBFFieldFlags.System) { this.fields.Add(fieldDescriptor); } handle.Free(); } byte headerTerminator = this.reader.ReadByte(); byte[] backlink = this.reader.ReadBytes(263); }
public DBFReader(Stream anIn) { try { _dataInputStream = new BinaryReader(anIn); isClosed = false; _header = new DBFHeader(); _header.Read(_dataInputStream); /* it might be required to leap to the start of records at times */ int t_dataStartIndex = _header.HeaderLength - (32 + (32 * _header.FieldArray.Length)) - 1; if (t_dataStartIndex > 0) { _dataInputStream.ReadBytes((t_dataStartIndex)); } } catch (IOException e) { throw new DBFException("Failed To Read DBF", e); } }
public DBFReader(string anIn) { try { _dataInputStream = new BinaryReader( File.Open(anIn, FileMode.Open, FileAccess.Read, FileShare.Read) ); var dbtPath = Path.ChangeExtension(anIn, "dbt"); if (File.Exists(dbtPath)) { _dataMemoLoc = dbtPath; } isClosed = false; _header = new DBFHeader(); _header.Read(_dataInputStream); /* it might be required to leap to the start of records at times */ int t_dataStartIndex = _header.HeaderLength - (32 + (32 * _header.FieldArray.Length)) - 1; if (t_dataStartIndex > 0) { _dataInputStream.ReadBytes((t_dataStartIndex)); } } catch (IOException ex) { throw new DBFException("Failed To Read DBF", ex); } }
public DBFWriter(Stream dbfFile) { raf = dbfFile; /* before proceeding check whether the passed in File object is an empty/non-existent file or not. */ if (raf.Length == 0) { header = new DBFHeader(); return; } header = new DBFHeader(); header.Read(new BinaryReader(raf)); /* position file pointer at the end of the raf */ raf.Seek(-1, SeekOrigin.End); /* to ignore the END_OF_DATA byte at EoF */ recordCount = header.NumberOfRecords; }
/// Creates a DBFWriter which can append to records to an existing DBF file. /// @param dbfFile. The file passed in shouls be a valid DBF file. /// @exception Throws DBFException if the passed in file does exist but not a valid DBF file, or if an IO error occurs. public DBFWriter(String dbfFile) { try { raf = File.Open(dbfFile, FileMode.OpenOrCreate, FileAccess.ReadWrite); _dataMemoLoc = Path.ChangeExtension(dbfFile, "dbt"); /* before proceeding check whether the passed in File object is an empty/non-existent file or not. */ if (raf.Length == 0) { header = new DBFHeader(); return; } header = new DBFHeader(); header.Read(new BinaryReader(raf)); /* position file pointer at the end of the raf */ raf.Seek(-1, SeekOrigin.End); /* to ignore the END_OF_DATA byte at EoF */ } catch (FileNotFoundException e) { throw new DBFException("Specified file is not found. ", e); } catch (IOException e) { throw new DBFException(" while reading header", e); } recordCount = header.NumberOfRecords; }
/// Creates an empty Object. public DBFWriter() { header = new DBFHeader(); }