using DevExpress.XtraEditors; using Ips.Library.Basic; using Ips.Library.DxpLib; using Ips.Sps.Tools.SignalDdces; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; namespace Ips.Sps.Tools.FileConcats { public partial class FileConcatMainCtrl : DevExpress.XtraEditors.XtraUserControl { public FileConcatMainCtrl() { InitializeComponent(); gvMain.UseDefaultSettings(new GridViewDefaultSetting() { DefaultEmptyDisplayText = false, Editable = true, ShowRowNum = true }); } string vmfile = Path.Combine(SpsConst.VmFolder, "fileconcat.json"); FileConcatViewModel vm; private void FileConcatMainCtrl_Load(object sender, EventArgs e) { if (File.Exists(vmfile)) { vm = JsonSerializer.Deserialize(File.ReadAllText(vmfile)); } else { vm = new FileConcatViewModel(); } bsMain.DataSource = vm; } private void OutFileButtonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { OutFileButtonEdit.EditValue = ToolDialog.SaveFile("", "选择输入文件"); } private void InFileEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { gvMain.EditingValue = ToolDialog.OpenFile("", "选择输入文件"); } private void btnConcat_Click(object sender, EventArgs e) { if (HasError()) return; string jsonText = JsonSerializer.Serialize(vm, new JsonSerializerOptions() { WriteIndented = true }); File.WriteAllText(vmfile, jsonText); var notFoundFiles = vm.FileList.Where(m => !File.Exists(m.FileName)).Select(m => m.FileName).ToList(); if (notFoundFiles.IsNotNullOrEmpty()) { MsgHelper.ShowError($"{notFoundFiles.JoinAsString(";")}不存在!"); return; } using var fsOut = new FileStream(vm.OutFile, FileMode.OpenOrCreate, FileAccess.Write); for (int i = 0; i < vm.FileList.Count; i++) { var item = vm.FileList[i]; using var fsIn = new FileStream(item.FileName, FileMode.Open, FileAccess.Read); if (item.AddZeroPrev > 0) fsOut.Seek(item.AddZeroPrev * 4, SeekOrigin.Current); fsIn.CopyTo(fsOut); if (item.AddZeroBack > 0) fsOut.Seek(item.AddZeroBack * 4, SeekOrigin.Current); } fsOut.SetLength(fsOut.Position); bool openFolder = MsgHelper.ShowConfirm("文件拼接成功,是否打开目录?"); if (openFolder) { Process.Start("explorer", Path.GetDirectoryName(vm.OutFile)); } } private bool HasError() { if (vm.OutFile.IsNullOrWhitespace()) { dxError.SetError(OutFileButtonEdit, "请选择输出文件"); } if (vm.FileList.Where(m => m.FileName.IsNotNullOrWhitespace()).IsNullOrEmpty()) { dxError.SetError(grdMain, "至少添加一个输入文件"); } return dxError.HasErrors; } } }