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); }
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); } }
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(); }
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 { // 最后关闭文件,无视关闭是否会发生错误了. } } } }