internal DbfRecord(BinaryReader reader, DbfHeader header, List <DbfField> fields, byte[] memoData, Encoding encoding) { this.fields = fields; Data = new List <object>(); // Read record marker. byte marker = reader.ReadByte(); // Read entire record as sequence of bytes. // Note that record length includes marker. byte[] row = reader.ReadBytes(header.RecordLength - 1); // Read data for each field. int offset = 0; foreach (DbfField field in fields) { // Copy bytes from record buffer into field buffer. byte[] buffer = new byte[field.Length]; Array.Copy(row, offset, buffer, 0, field.Length); offset += field.Length; IEncoder encoder = EncoderFactory.GetEncoder(field.Type); Data.Add(encoder.Decode(buffer, memoData, encoding)); } }
/// <summary> /// Creates writes the current instance to the specified stream. /// </summary> /// <param name="stream">The output stream.</param> /// <param name="version">The version <see cref="DbfVersion" />. If unknown specified, use current header version.</param> public void Write(Stream stream, DbfVersion version = DbfVersion.Unknown) { if (version != DbfVersion.Unknown) { header.Version = version; header = DbfHeader.CreateHeader(header.Version); } Write(stream, true); }
private void ReadHeader(BinaryReader reader) { // Peek at version number, then try to read correct version header. byte versionByte = reader.ReadByte(); reader.BaseStream.Seek(0, SeekOrigin.Begin); DbfVersion version = (DbfVersion)versionByte; Header = DbfHeader.CreateHeader(version); Header.Read(reader); }
/// <summary> /// Creates a new file, writes the current instance to the file, and then closes the file. If the target file already exists, it is overwritten. /// </summary> /// <param name="path">The file to read.</param> /// <param name="version">The version <see cref="DbfVersion" />. If unknown specified, use current header version.</param> public void Write(string path, DbfVersion version = DbfVersion.Unknown) { if (version != DbfVersion.Unknown) { header.Version = version; header = DbfHeader.CreateHeader(header.Version); } using (FileStream stream = File.Open(path, FileMode.Create, FileAccess.Write)) { Write(stream, false); } }
public void Write(String path, DbfVersion version = DbfVersion.Unknown) { // Use version specified. If unknown specified, use current header version. if (version != DbfVersion.Unknown) { header.Version = version; } header = DbfHeader.CreateHeader(header.Version); FileStream stream = File.Open(path, FileMode.Create, FileAccess.Write); BinaryWriter writer = new BinaryWriter(stream); header.Write(writer, fields, records); WriteFields(writer); WriteRecords(writer); writer.Close(); stream.Close(); }
/// <summary> /// Creates empty dBASE table with specified encoding. /// </summary> /// <param name="version"></param> public Dbf(DbfVersion version, Encoding encoding) { _encoding = encoding; Header = DbfHeader.CreateHeader(version); }
/// <summary> /// Creates empty dBASE table with default (ASCII) encoding. /// </summary> /// <param name="version"></param> public Dbf(DbfVersion version) { Header = DbfHeader.CreateHeader(version); }
/// <summary> /// Initializes a new instance of the <see cref="Dbf" />. /// </summary> public Dbf() { header = DbfHeader.CreateHeader(DbfVersion.FoxBaseDBase3NoMemo); Fields = new List <DbfField>(); Records = new List <DbfRecord>(); }