示例#1
0
        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));
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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);
            }
        }
示例#5
0
        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();
        }
示例#6
0
 /// <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);
 }
示例#7
0
 /// <summary>
 /// Creates empty dBASE table with default (ASCII) encoding.
 /// </summary>
 /// <param name="version"></param>
 public Dbf(DbfVersion version)
 {
     Header = DbfHeader.CreateHeader(version);
 }
示例#8
0
 /// <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>();
 }