/// <summary>
 /// Gets the header from a dbf file.
 /// </summary>
 /// <param name="dbfFile">The DBF file.</param>
 /// <returns></returns>
 public static dBaseHeader GetHeader(string dbfFile)
 {
     if (!File.Exists(dbfFile))
         throw new FileNotFoundException(dbfFile + " not found");
     dBaseHeader header = new dBaseHeader();
     header.ReadHeader(new BinaryReader(new FileStream(dbfFile, FileMode.Open, FileAccess.Read, FileShare.Read)));
     return header;
 }
Esempio n. 2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="header"></param>
		public void Write(dBaseHeader 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;
			header.WriteHeader(_writer);
			_header = header;			
		}
Esempio n. 3
0
        /// <summary>
        /// This will return a copy of the index, but also preserve
        /// a master copy in this object that is read-only.
        /// </summary>
        /// <param name="filename">The filename of the dbf file to index</param>
        /// <returns>returns a List of long offsets.  The index in the list is the row value.</returns>
        public List<long> GetIndex(string filename)
        {
            List<long> OffsetsCopy = new List<long>();
            _offsets = new List<long>();
            if (filename == null)
            {
                throw new ArgumentNullException(filename);
            }
            // check for the file existing here, otherwise we will not get an error
            //until we read the first record or read the header.
            if (!System.IO.File.Exists(filename))
            {
                throw new System.IO.FileNotFoundException(String.Format("Could not find file \"{0}\"", filename));
            }
            _filename = filename;

            _header = new dBaseHeader();
            // read the header
            System.IO.FileStream stream = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            System.IO.BinaryReader binaryreader = new System.IO.BinaryReader(stream);
            _header.ReadHeader(binaryreader);

            int iCurrentRecord = 0;
            long CurrentOffset = _header.HeaderLength;
            byte DeleteChar = Convert.ToByte('*');
            int RowLength = _header.RecordLength;
            while (iCurrentRecord < _header.NumRecords)
            {
                int Val = stream.ReadByte();
                if (stream.ReadByte() != DeleteChar)
                {
                    _offsets.Add(CurrentOffset);
                    OffsetsCopy.Add(CurrentOffset);
                    iCurrentRecord++;
                }
                stream.Seek(RowLength - 1, System.IO.SeekOrigin.Current);
                CurrentOffset += RowLength;
            }
            binaryreader.Close();
            stream.Close();
            binaryreader.Close();
            return OffsetsCopy;




        }
Esempio n. 4
0
        /// <summary>
        /// Creates a new instance of the commmand server from a file
        /// </summary>
        /// <param name="Filename">The filename of the dbf to read, edit or append to</param>
        public Commands(string Filename)
        {
            if (Filename == null)
            {
                throw new ArgumentNullException(Filename);
            }
            // check for the file existing here, otherwise we will not get an error
            //until we read the first record or read the header.
            if (!File.Exists(Filename))
            {
                throw new FileNotFoundException(String.Format("Could not find file \"{0}\"", Filename));
            }
            _Filename = Filename;

            dBaseReader dr = new dBaseReader(Filename);
            _Header = dr.GetHeader();
        }
Esempio n. 5
0
		/// <summary>
		/// Gets the header information for the dbase file.
		/// </summary>
		/// <returns>DbaseFileHeader contain header and field information.</returns>
		public dBaseHeader GetHeader() 
		{
			if (_header==null)
			{
				FileStream stream = new FileStream(_filename, System.IO.FileMode.Open);
				BinaryReader dbfStream = new BinaryReader(stream);

				_header = new dBaseHeader();
				// read the header
				_header.ReadHeader(dbfStream);

				dbfStream.Close();
				stream.Close();

			}
			return _header;
		}
		/// <summary>
		/// Initializes a new instance of the ShapefileDataReader class.
		/// </summary>
		/// <param name="filename">The shapefile to read (minus the .shp extension)</param>
		///<param name="geometryFactory">The GeometryFactory to use.</param>
		public ShapefileReader(string filename, GeometryFactory geometryFactory) 
		{
			if (filename == null)
				throw new ArgumentNullException("filename");
			if (geometryFactory == null)
				throw new ArgumentNullException("geometryFactory");
			_geometryFactory = geometryFactory;
			_open = true;			

			if (filename.ToLower().EndsWith(".shp"))
				filename = filename.ToLower().Replace(".shp",String.Empty);
			
			 _dbfReader = new dBaseReader(filename + ".dbf");
			 _shpReader = new ShapeReader(filename + ".shp", geometryFactory);

			_dbfHeader =  _dbfReader.GetHeader();
			_recordCount = _dbfHeader.NumRecords;			
			
			// copy dbase fields to our own array. Insert into the first position, the shape column
			_dbaseFields = new FieldDescriptor[_dbfHeader.Fields.Length + 1];
			_dbaseFields[0] = FieldDescriptor.ShapeField();
			for(int i=0; i < _dbfHeader.Fields.Length; i++)
				_dbaseFields[i+1] = _dbfHeader.Fields[i];
			
			_ShapeHeader = _shpReader.Header;			
			_dbfEnumerator = _dbfReader.GetEnumerator();
			_shpEnumerator = _shpReader.GetEnumerator();
			_moreRecords = true;
		}
Esempio n. 7
0
 /// <summary>
 /// Writes the entire contents of a data Table to the file.
 /// This will create a header from the Table information.
 /// </summary>
 /// <param name="Table">The Data Table to write.</param>
 public void Write(System.Data.DataTable Table)
 {
     _header = new dBaseHeader();
     
     foreach(System.Data.DataRow dr in Table.Rows)
     {
         Write(dr, Table);
     }
 }