public static bool Create(string filename, Fields fields) { try { FileInfo fi = new FileInfo(filename); if (fi.Exists) { fi.Delete(); } StreamWriter sw = new StreamWriter(filename); BinaryWriter bw = new BinaryWriter(sw.BaseStream); bool ret = DBFFileHader.Write(bw, fields); bw.Flush(); sw.Flush(); sw.Close(); return(ret); } catch { return(false); } }
public DBFFile(string filename) { try { FileInfo fi = new FileInfo(filename); if (!fi.Exists) { return; } _filename = filename; StreamReader sr = new StreamReader(filename); BinaryReader br = new BinaryReader(sr.BaseStream); _header = new DBFFileHader(br); _fields = new List <FieldDescriptor>(); for (int i = 0; i < _header.FieldsCount; i++) { FieldDescriptor field = new FieldDescriptor(br); _fields.Add(field); } sr.Close(); int c = 1; string idFieldName = _idField; while (HasField(idFieldName)) { idFieldName = _idField + "_" + c++; } _idField = idFieldName; _encoder = null; try { switch ((CodePage)_header.LanguageDriver) { case CodePage.DOS_USA: _encoder = EncodingFromCodePage(437); break; case CodePage.DOS_Multilingual: _encoder = EncodingFromCodePage(850); break; case CodePage.Windows_ANSI: _encoder = EncodingFromCodePage(1252); break; case CodePage.EE_MS_DOS: _encoder = EncodingFromCodePage(852); break; case CodePage.Nordic_MS_DOS: _encoder = EncodingFromCodePage(865); break; case CodePage.Russian_MS_DOS: _encoder = EncodingFromCodePage(866); break; case CodePage.Windows_EE: _encoder = EncodingFromCodePage(1250); break; case CodePage.UTF_7: _encoder = new UTF7Encoding(); break; } } catch { } if (_encoder == null) { FileInfo encFi = new FileInfo(fi.Directory.FullName + @"\dbf_default_encoding.txt"); if (encFi.Exists) { using (StreamReader encSr = new StreamReader(encFi.FullName)) { switch (encSr.ReadLine().ToLower()) { case "utf8": case "utf-8": _encoder = new UTF8Encoding(); break; case "unicode": _encoder = new UnicodeEncoding(); break; case "ascii": _encoder = new ASCIIEncoding(); break; } } } if (_encoder == null) { _encoder = new UTF7Encoding(); } } //Record(0); //Record(1); } catch { } }