示例#1
0
            /// <summary>
            /// </summary>
            protected void ReadHeader()
            {
                _header = new DbaseFileHeader();
                // read the header
                _header.ReadHeader(_dbfReader, _parent._encodingProvider);

                // how many records remain
                _readPosition = _header.HeaderLength;
            }
示例#2
0
        /// <summary>
        /// Method to write <paramref name="header"/> to the dbase stream
        /// </summary>
        /// <param name="header">The header to write</param>
        public void Write(DbaseFileHeader header)
        {
            //if (header == null)
            //    throw new ArgumentNullException("header");
            ////if (_recordsWritten)
            ////    throw new InvalidOperationException("Records have already been written. Header file needs to be written first.");
            //_headerWritten = true;

            //if (header.Encoding.WindowsCodePage != _encoding.WindowsCodePage)
            //{
            //    header.Encoding = _encoding;
            //}

            //header.WriteHeader(_writer);
            //_header = header;

            if (header == null)
            {
                throw new ArgumentNullException("header");
            }
            //if (_recordsWritten)
            //    throw new InvalidOperationException("Records have already been written. Header file needs to be written first.");

            _headerWritten = true;

            // Set the encoding if not already done.
            if (header.Encoding == null)
            {
                header.Encoding = _encoding;
            }

            //if (header.Encoding.WindowsCodePage != _encoding.WindowsCodePage)
            //{
            //    header.Encoding = _encoding;
            //}

            // Get the current position
            var currentPosition = (int)_writer.BaseStream.Position;

            //Header should always be written first in the file
            if (_writer.BaseStream.Position != 0)
            {
                _writer.Seek(0, SeekOrigin.Begin);
            }

            // actually write the header
            header.WriteHeader(_writer);

            // reposition the stream
            if (currentPosition != 0)
            {
                _writer.Seek(currentPosition, SeekOrigin.Begin);
            }

            _header = header;
        }
示例#3
0
 /// <summary>
 /// Gets the header information for the dbase file.
 /// </summary>
 /// <returns>DbaseFileHeader contain header and field information.</returns>
 public DbaseFileHeader GetHeader()
 {
     if (_header == null)
     {
         using (var dbfReader = new BinaryReader(_streamProvider.OpenRead()))
         {
             // read the header
             _header = new DbaseFileHeader();
             _header.ReadHeader(dbfReader, _encodingProvider);
         }
     }
     return(_header);
 }
示例#4
0
 /// <summary>
 /// Initializes a new instance of the DbaseFileWriter class using the provided <paramref name="streamProviderRegistry"/> and the default encoding
 /// </summary>
 /// <param name="streamProviderRegistry">The stream provider registry</param>
 public DbaseFileWriter(IStreamProviderRegistry streamProviderRegistry)
     : this(streamProviderRegistry,
            DbaseFileHeader.GetEncoding(streamProviderRegistry[StreamTypes.DataEncoding]))
 {
 }