Exemplo n.º 1
0
        public void TestHeader()
        {
            var path = Folder + @"DB_HEADER.DBF";

            using var dbf = new DbfWriter(path, DbfVersion.dBASE_III);

            dbf.AddField(new DbfField("CHRFIELD", DbfFieldType.Character, 10));
            //dbf.AddRecord("ANDREI");
        }
Exemplo n.º 2
0
        public void TestMethod1()
        {
            var path    = Folder + @"DB.DBF";
            var version = DbfVersion.dBASE_IV_SQL_Table;

            var w0 = new object[] { true, DateTime.Today, "HELLO!!!", 20001000.34, 345.780 };
            var w1 = new object[] { false, DateTime.Today.AddDays(-51), "BYE!!!", 10002000.34, 780.345 };

            IReadOnlyList <DbfField> fields;
            {
                using var writer = new DbfWriter(path, version);
                Assert.AreEqual(version, writer.Version);

                //dbf.AddField(new DbfField("INTFIELD", DbfFieldType.Integer));
                writer.AddField(new DbfField("LGCFIELD", DbfFieldType.Logical));
                writer.AddField(new DbfField("DATFIELD", DbfFieldType.Date));

                writer.AddField(new DbfField("CHRFIELD", DbfFieldType.Character, 10));

                writer.AddField(new DbfField("NUMFIELD", DbfFieldType.Numeric, 10, 2));
                writer.AddField(new DbfField("FLTFIELD", DbfFieldType.Float));

                Assert.AreEqual(5, writer.Fields.Count);

                writer.AddRecord(w0);
                writer.AddRecord(w1);

                fields = writer.Fields;
            }

            {
                using var reader = new DbfReader(path);
                // Header
                Assert.AreEqual(version, reader.Version);
                Assert.AreEqual(fields.Count, reader.Fields.Count);

                Assert.IsTrue(fields.Select(x => x.Name).Zip(reader.Fields.Select(x => x.Name)).All(x => x.First.Equals(x.Second)));
                Assert.IsTrue(fields.Select(x => x.Type).Zip(reader.Fields.Select(x => x.Type)).All(x => x.First.Equals(x.Second)));
                Assert.IsTrue(fields.Select(x => x.Length).Zip(reader.Fields.Select(x => x.Length)).All(x => x.First.Equals(x.Second)));
                Assert.IsTrue(fields.Select(x => x.Precision).Zip(reader.Fields.Select(x => x.Precision)).All(x => x.First.Equals(x.Second)));

                Assert.IsTrue(fields.Zip(reader.Fields).All(x => x.First.Equals(x.Second)));

                // Records
                Assert.AreEqual(2, reader.RecordCount);

                var r0 = reader.Read();
                Assert.IsNotNull(r0);

                var r1 = reader.Read();
                Assert.IsNotNull(r1);

                CollectionAssert.AreEqual(w0, r0);
                CollectionAssert.AreEqual(w1, r1);
            }
        }
Exemplo n.º 3
0
        public void WriteRecord_DbfMappingException()
        {
            var list = new List <ErrorDbf> {
                new ErrorDbf {
                    NAME_ID = "1"
                }
            };

            Assert.Throws <DbfMappingException>(() => DbfWriter.Save(It.IsAny <string>(), list));
        }
Exemplo n.º 4
0
        public void WriteHeadOnly()
        {
            int count;
            var item = new List <KLF_NAMESDBF>();

            DbfWriter.Save(Tmp, item);
            using (var dbf = DbfReader.Open(Tmp))
            {
                count = dbf.Count;
            }
            Assert.AreEqual(0, count);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 将FeatureSet保存为shapefile
        /// </summary>
        /// <param name="iFeatureSet"></param>
        /// <param name="shpFilePath"></param>
        public static void SaveFeatureSet(IFeatureSet iFeatureSet,
                                          string shpFilePath)
        {
            var dir = Path.GetDirectoryName(shpFilePath);

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir ?? throw new InvalidOperationException(nameof(shpFilePath)));
            }

            ShpUtil.DeleteShp(shpFilePath);
            var(shxFilePath, dbfFilePath, prjFilePath) = ShpUtil.GetSubFileName(shpFilePath);

            using var dbfWriter = new DbfWriter(iFeatureSet.AttrTable,
                                                dbfFilePath, DbfEncodingUtil.DefaultEncoding);
            dbfWriter.Write();

            var featureSet = (FeatureSet)iFeatureSet;
            var header     = featureSet.GetHeader();

            using ShpWriter shpWriter = new ShpWriter(shpFilePath);
            using ShxWriter shxWriter = new ShxWriter(shxFilePath);
            shpWriter.WriterHeader(header);
            shxWriter.WriterHeader(header);

            int offset = 100;

            foreach (var feature in featureSet.Features)
            {
                var contentByteLength = shpWriter.WriterRecord(feature);
                shxWriter.WriterRecord(offset, contentByteLength);

                offset += contentByteLength;
            }

            shpWriter.WriteFileLength();;
            shxWriter.WriteFileLength();
            if (featureSet.Crs != null)
            {
                using var fsStream = new FileStream(prjFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read);
                using var sw       = new StreamWriter(fsStream);
                sw.Write(featureSet.Crs.Wkt);
            }
        }
Exemplo n.º 6
0
        public static ShapeFileBytes GetShapeFileStreams(IFeatureSet iFeatureSet)
        {
            using var dbfWriter = new DbfWriter(iFeatureSet.AttrTable,
                                                "", DbfEncodingUtil.DefaultEncoding);
            dbfWriter.Write();

            var featureSet = (FeatureSet)iFeatureSet;
            var header     = featureSet.GetHeader();

            using ShpWriter shpWriter = new ShpWriter();
            using ShxWriter shxWriter = new ShxWriter();
            shpWriter.WriterHeader(header);
            shxWriter.WriterHeader(header);

            int offset = 100;

            foreach (var feature in featureSet.Features)
            {
                var contentByteLength = shpWriter.WriterRecord(feature);
                shxWriter.WriterRecord(offset, contentByteLength);

                offset += contentByteLength;
            }

            shpWriter.WriteFileLength();
            shxWriter.WriteFileLength();

            var fileBytes = new ShapeFileBytes
            {
                DbfBytes = ((MemoryStream)dbfWriter.Stream).ToArray(),
                ShpBytes = ((MemoryStream)shpWriter.Stream).ToArray(),
                ShxBytes = ((MemoryStream)shxWriter.Stream).ToArray()
            };

            if (featureSet.Crs != null)
            {
                var bytes = Encoding.UTF8.GetBytes(featureSet.Crs.Wkt);
                fileBytes.PrjBytes = bytes;
            }
            return(fileBytes);
        }
Exemplo n.º 7
0
        public void DbfReadSimpleFile()
        {
            var f = new DataFile()
            {
                Encoding = Encoding.GetEncoding(866)
            };
            var rdr = new DbfReader(f);

            using (var file = File.Open("../../testfiles/simple.dbf", FileMode.Open))
            {
                rdr.Read(file);
            }

            var wrt = new DbfWriter(f);

            using (var file = File.Open("../../testfiles/output.dbf", FileMode.OpenOrCreate | FileMode.Truncate))
            {
                wrt.Write(file);
            }

            ProviderTools.CompareFiles("../../testfiles/simple.dbf", "../../testfiles/output.dbf");
        }
Exemplo n.º 8
0
        public void DbfReadAutoEncoding()
        {
            var f = new DataFile()
            {
                Encoding = null                 // AUTO
            };

            var rdr = new DbfReader(f);

            using (var file = File.Open("../../testfiles/ENCODING.dbf", FileMode.Open))
            {
                rdr.Read(file);
            }

            var wrt = new DbfWriter(f);

            using (var file = File.Open("../../testfiles/output.dbf", FileMode.OpenOrCreate | FileMode.Truncate))
            {
                wrt.Write(file);
            }

            ProviderTools.CompareFiles("../../testfiles/ENCODING.dbf", "../../testfiles/output.dbf");
        }
Exemplo n.º 9
0
        public void WriteNRecords()
        {
            var rand = new Random();
            var n    = rand.Next(Int16.MaxValue);
            var list = new List <KLF_NAMESDBF>(Enumerable.Repeat(new KLF_NAMESDBF
            {
                FULL_NAME = "1",
                DATEF     = DateTime.Now,
                DATEEmpty = DateTime.MinValue,
                TimeEmpty = DateTime.MinValue,
                TimeFull  = DateTime.Now,
                Bool      = false,
                Dec       = 0m
            }, n));

            DbfWriter.Save(Tmp, list);
            int readN;

            using (var dbf = DbfReader.Open(Tmp))
            {
                readN = dbf.Count;
            }
            Assert.AreEqual(n, readN);
        }
Exemplo n.º 10
0
        public void TestReadSample()
        {
            var sample  = Folder + @"SAMPLE.dbf";
            var sample2 = Folder + @"SAMPLE2.dbf";

            IReadOnlyList <DbfField> fields;
            List <object[]>          records;

            // Read Sample
            {
                using var reader = new DbfReader(sample);

                Assert.AreEqual(4, (int)reader.Version);
                Assert.AreEqual(5, reader.Fields.Count);

                fields = reader.Fields;
                Assert.IsNotNull(fields);

                records = reader.Records()?.ToList();
                Assert.IsNotNull(records);
            }

            // Write new
            {
                using var writer = new DbfWriter(sample2, DbfVersion.dBASE_IV);

                foreach (var f in fields)
                {
                    writer.AddField(new DbfField(f.Name, f.Type, f.Length, f.Precision));
                }

                Assert.AreEqual(fields.Count, writer.Fields.Count);

                foreach (var record in records)
                {
                    writer.AddRecord(record);
                }

                Assert.AreEqual(records.Count, writer.RecordCount);
            }

            // Read new
            {
                using var reader = new DbfReader(sample2);

                Assert.AreEqual(4, (int)reader.Version);
                Assert.AreEqual(5, reader.Fields.Count);
                Assert.AreEqual(records.Count, reader.RecordCount);

                var records2 = reader.Records()?.ToList();
                Assert.IsNotNull(records2);
                Assert.AreEqual(records.Count, records2.Count);

                foreach (var(fr, sr) in records.Zip(records2))
                {
                    foreach (var(fv, sv) in fr.Zip(sr))
                    {
                        Assert.AreEqual(fv, sv);
                    }
                }
            }
        }