private void MergeFileBtn_Click_1(object sender, EventArgs e)
 {
     // 首先判断,文件是否已经存在
     if (!(File.Exists(SourceFileName1) && File.Exists(SourceFileName2)))
     {
         // 如果文件不存在,那么提示无法读取!
         MessageBox.Show(SourceFileName1 + "或者" + SourceFileName2 + "文件不存在!");
         return;
     }
     try
     {
         if (File.Exists(SaveFileName))
         {
             File.Delete(SaveFileName);
         }
         ShapeFileFunction.MergeTwoShpFile(SourceFileName1, SourceFileName2, SaveFileName);
     }
     catch (Exception ex)
     {
         Console.WriteLine("在合并文件的过程中,发生了异常!");
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.StackTrace);
     }
     MessageBox.Show("合并完成!");
 }
        private void MergeFolderBtn_Click(object sender, EventArgs e)
        {
            string sourceDerectiony = OpenFolderName.Text.Trim();
            string TargetFile       = SaveFileName2.Text.Trim();

            if (sourceDerectiony.Length <= 0 || TargetFile.Length <= 0)
            {
                MessageBox.Show("SourceFolder or TargetFile is null.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            else if (!Directory.Exists(sourceDerectiony))
            {
                MessageBox.Show("SourceFolder isn't exist.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (File.Exists(TargetFile))
            {
                File.Delete(TargetFile);
            }
            string[] files = Directory.GetFiles(sourceDerectiony, "*.shp");
            if (files.Length <= 1)
            {
                MessageBox.Show("Merge file less 1.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks); //获取当前时间的刻度数

            ShapeFileFunction.MergeManyShpFile(files, TargetFile);

            TimeSpan ts2      = new TimeSpan(DateTime.Now.Ticks);
            TimeSpan ts       = ts2.Subtract(ts1).Duration();                                                                                               //时间差的绝对值
            String   spanTime = ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒" + ts.Milliseconds.ToString() + "毫秒"; //以X小时X分X秒的格式现实执行时间

            MessageBox.Show("合并结束,耗时" + spanTime);
        }
Example #3
0
        public static void MergeManyShpFile(string[] sourceFiles, String saveFileName, BackgroundWorker worker, DoWorkEventArgs e)
        {
            BinaryReader binaryReader1   = null;
            FileStream   fileStreamRead  = null;
            FileStream   fileStreamWrite = null;

            fileStreamWrite = new FileStream(saveFileName, FileMode.Create, FileAccess.Write);
            BinaryWriter  binaryWriter       = new BinaryWriter(fileStreamWrite);
            Record        record             = new Record();
            int           recordLastNum      = 0;
            ShpFileHeader shpFileHeaderTatal = new ShpFileHeader();
            ShpFileHeader shpFileHeaderRead  = new ShpFileHeader();

            for (int i = 0; i < sourceFiles.Length; i++)
            {
                fileStreamRead    = new FileStream(sourceFiles[i], FileMode.Open, FileAccess.Read, FileShare.None);
                binaryReader1     = new BinaryReader(fileStreamRead);
                shpFileHeaderRead = ShapeFileFunction.ReadShpFileHeader(binaryReader1);
                if (i == 0)
                {
                    ShapeFileFunction.WriteShpFileHeader(shpFileHeaderRead, binaryWriter);
                    shpFileHeaderTatal = shpFileHeaderRead;
                }
                else
                {
                    shpFileHeaderTatal = ShapeFileFunction.MergeShpHeader(shpFileHeaderTatal, shpFileHeaderRead);
                }
                while (binaryReader1.BaseStream.Position < binaryReader1.BaseStream.Length)
                {
                    record           = ShapeFileFunction.ReadRecord(binaryReader1);
                    record.recordNum = recordLastNum++;
                    ShapeFileFunction.WriteRecord(record, binaryWriter);
                }
                binaryReader1.Close();
                fileStreamRead.Close();
                worker.ReportProgress(i * 100 / (sourceFiles.Length - 1));
                //  Thread.Sleep(200);
                if (worker.CancellationPending)
                {
                    fileStreamWrite.Seek(0, SeekOrigin.Begin);
                    WriteShpFileHeader(shpFileHeaderTatal, binaryWriter);
                    binaryWriter.Close();
                    fileStreamWrite.Close();
                    e.Cancel = true;
                    return;
                }
            }

            fileStreamWrite.Seek(0, SeekOrigin.Begin);
            WriteShpFileHeader(shpFileHeaderTatal, binaryWriter);
            binaryWriter.Close();
            fileStreamWrite.Close();
        }
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            try
            {
                ShapeFileFunction.MergeManyShpFile(files, TargetFile, worker, e);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Merge error,error code:" + ex.ToString(), "Information", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }
Example #5
0
        public static void MergeShpRecord(BinaryReader binaryReader1, BinaryReader binaryReader2, BinaryWriter binaryWriter)
        {
            Record record = new Record();

            while (binaryReader1.BaseStream.Position < binaryReader1.BaseStream.Length)
            {
                record = ShapeFileFunction.ReadRecord(binaryReader1);
                ShapeFileFunction.WriteRecord(record, binaryWriter);
            }
            int recordLastNum = record.recordNum;

            while (binaryReader2.BaseStream.Position < binaryReader2.BaseStream.Length)
            {
                record           = ShapeFileFunction.ReadRecord(binaryReader2);
                record.recordNum = recordLastNum + record.recordNum;
                ShapeFileFunction.WriteRecord(record, binaryWriter);
            }
        }
        public static void MergeManyShpFile(string[] sourceFiles, String saveFileName, ContorlMinAndMaxValue contorlMinAndMaxValue, RefreshValue refreshValue)
        {
            BinaryReader binaryReader1   = null;
            FileStream   fileStreamRead  = null;
            FileStream   fileStreamWrite = null;

            fileStreamWrite = new FileStream(saveFileName, FileMode.Create, FileAccess.Write);
            BinaryWriter  binaryWriter       = new BinaryWriter(fileStreamWrite);
            Record        record             = new Record();
            int           recordLastNum      = 0;
            ShpFileHeader shpFileHeaderTatal = new ShpFileHeader();
            ShpFileHeader shpFileHeaderRead  = new ShpFileHeader();

            contorlMinAndMaxValue(0, sourceFiles.Length - 1);
            for (int i = 0; i < sourceFiles.Length; i++)
            {
                fileStreamRead    = new FileStream(sourceFiles[i], FileMode.Open, FileAccess.Read, FileShare.None);
                binaryReader1     = new BinaryReader(fileStreamRead);
                shpFileHeaderRead = ShapeFileFunction.ReadShpFileHeader(binaryReader1);
                if (i == 0)
                {
                    ShapeFileFunction.WriteShpFileHeader(shpFileHeaderRead, binaryWriter);
                    shpFileHeaderTatal = shpFileHeaderRead;
                }
                else
                {
                    shpFileHeaderTatal = ShapeFileFunction.MergeShpHeader(shpFileHeaderTatal, shpFileHeaderRead);
                }
                while (binaryReader1.BaseStream.Position < binaryReader1.BaseStream.Length)
                {
                    record           = ShapeFileFunction.ReadRecord(binaryReader1);
                    record.recordNum = recordLastNum++;
                    ShapeFileFunction.WriteRecord(record, binaryWriter);
                }
                binaryReader1.Close();
                fileStreamRead.Close();
                Thread.Sleep(500);
                refreshValue(i);
            }
            fileStreamWrite.Seek(0, SeekOrigin.Begin);
            WriteShpFileHeader(shpFileHeaderTatal, binaryWriter);
            binaryWriter.Close();
            fileStreamWrite.Close();
        }
Example #7
0
        public static void MergeTwoShpFile(string sourceFileName1, string sourceFileName2, String saveFileName)
        {
            BinaryReader binaryReader1 = null;
            BinaryReader binaryReader2 = null;
            FileStream   fileStream1   = null;
            FileStream   fileStream2   = null;
            FileStream   fileStream3   = null;

            try
            {
                fileStream1   = new FileStream(sourceFileName1, FileMode.Open, FileAccess.Read, FileShare.None);
                binaryReader1 = new BinaryReader(fileStream1);
                fileStream2   = new FileStream(sourceFileName2, FileMode.Open, FileAccess.Read, FileShare.None);
                binaryReader2 = new BinaryReader(fileStream2);

                fileStream3 = new FileStream(saveFileName, FileMode.Create, FileAccess.Write);
                BinaryWriter binaryWriter = new BinaryWriter(fileStream3);

                ShpFileHeader shpFileHeader1 = new ShpFileHeader();
                shpFileHeader1 = ShapeFileFunction.ReadShpFileHeader(binaryReader1);

                ShpFileHeader shpFileHeader2 = new ShpFileHeader();
                shpFileHeader2 = ShapeFileFunction.ReadShpFileHeader(binaryReader2);
                ShpFileHeader shpFileHeader3 = ShapeFileFunction.MergeShpHeader(shpFileHeader1, shpFileHeader2);

                ShapeFileFunction.WriteShpFileHeader(shpFileHeader3, binaryWriter);

                MergeShpRecord(binaryReader1, binaryReader2, binaryWriter);
                binaryReader1.Close();
                fileStream1.Close();
                binaryReader2.Close();
                fileStream2.Close();
                binaryReader1 = null;
                binaryReader2 = null;
                fileStream1   = null;
                fileStream2   = null;
                fileStream3   = null;
                binaryWriter.Close();
                fileStream2.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("在合并文件的过程中,发生了异常!");
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                if (fileStream1 != null || fileStream2 != null || fileStream3 != null)
                {
                    try
                    {
                        fileStream1.Close();
                        fileStream2.Close();
                        fileStream3.Close();
                    }
                    catch
                    {
                        // 最后关闭文件,无视关闭是否会发生错误了.
                    }
                }
            }
        }