FileConcatMainCtrl.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using DevExpress.XtraEditors;
  2. using Ips.Library.Basic;
  3. using Ips.Library.DxpLib;
  4. using Ips.Sps.Tools.SignalDdces;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Diagnostics;
  10. using System.Drawing;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Text.Json;
  15. using System.Threading.Tasks;
  16. using System.Windows.Forms;
  17. namespace Ips.Sps.Tools.FileConcats
  18. {
  19. public partial class FileConcatMainCtrl : DevExpress.XtraEditors.XtraUserControl
  20. {
  21. public FileConcatMainCtrl()
  22. {
  23. InitializeComponent();
  24. gvMain.UseDefaultSettings(new GridViewDefaultSetting() { DefaultEmptyDisplayText = false, Editable = true, ShowRowNum = true });
  25. }
  26. string vmfile = Path.Combine(SpsConst.VmFolder, "fileconcat.json");
  27. FileConcatViewModel vm;
  28. private void FileConcatMainCtrl_Load(object sender, EventArgs e)
  29. {
  30. if (File.Exists(vmfile))
  31. {
  32. vm = JsonSerializer.Deserialize<FileConcatViewModel>(File.ReadAllText(vmfile));
  33. }
  34. else
  35. {
  36. vm = new FileConcatViewModel();
  37. }
  38. bsMain.DataSource = vm;
  39. }
  40. private void OutFileButtonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
  41. {
  42. OutFileButtonEdit.EditValue = ToolDialog.SaveFile("", "选择输入文件");
  43. }
  44. private void InFileEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
  45. {
  46. gvMain.EditingValue = ToolDialog.OpenFile("", "选择输入文件");
  47. }
  48. private void btnConcat_Click(object sender, EventArgs e)
  49. {
  50. if (HasError()) return;
  51. string jsonText = JsonSerializer.Serialize(vm, new JsonSerializerOptions() { WriteIndented = true });
  52. File.WriteAllText(vmfile, jsonText);
  53. var notFoundFiles = vm.FileList.Where(m => !File.Exists(m.FileName)).Select(m => m.FileName).ToList();
  54. if (notFoundFiles.IsNotNullOrEmpty())
  55. {
  56. MsgHelper.ShowError($"{notFoundFiles.JoinAsString(";")}不存在!");
  57. return;
  58. }
  59. using var fsOut = new FileStream(vm.OutFile, FileMode.OpenOrCreate, FileAccess.Write);
  60. for (int i = 0; i < vm.FileList.Count; i++)
  61. {
  62. var item = vm.FileList[i];
  63. using var fsIn = new FileStream(item.FileName, FileMode.Open, FileAccess.Read);
  64. if (item.AddZeroPrev > 0)
  65. fsOut.Seek(item.AddZeroPrev * 4, SeekOrigin.Current);
  66. fsIn.CopyTo(fsOut);
  67. if (item.AddZeroBack > 0)
  68. fsOut.Seek(item.AddZeroBack * 4, SeekOrigin.Current);
  69. }
  70. fsOut.SetLength(fsOut.Position);
  71. bool openFolder = MsgHelper.ShowConfirm("文件拼接成功,是否打开目录?");
  72. if (openFolder)
  73. {
  74. Process.Start("explorer", Path.GetDirectoryName(vm.OutFile));
  75. }
  76. }
  77. private bool HasError()
  78. {
  79. if (vm.OutFile.IsNullOrWhitespace())
  80. {
  81. dxError.SetError(OutFileButtonEdit, "请选择输出文件");
  82. }
  83. if (vm.FileList.Where(m => m.FileName.IsNotNullOrWhitespace()).IsNullOrEmpty())
  84. {
  85. dxError.SetError(grdMain, "至少添加一个输入文件");
  86. }
  87. return dxError.HasErrors;
  88. }
  89. }
  90. }