改成界面的批量查找替换小工具,没想到居然搞了两个晚上

             见之前写的一篇文章,算是批量替换的方法封装好了,无奈控制台太不友好,所以抽空搞成了winform 的界面,看着简单,没成想搞了两个晚上多才弄好,小小东西费了不少winform 的开发功力抓狂

           之前的文章链接:程序猿利器(一) 批量替换 为妹子写了个批量替换内容的代码,无奈友好性和可操作性太渣,能改的给改提示好看点,功能性就别动了

            做成了分三步操作的小界面,窗体大小固定,不许拖动,自动添加多个查找替换框,还用了数据绑定,控制panel 的隐藏与显示.....,先看看使用截图

            第一步将要批量查找替换的文件都放到 In 文件夹下面 

             

           第二步  输入 查找内容和替换内容,其中可以替换文件名字和添加多个 查找-替换 关键字,点击开始替换 完成替换

            

          第三步  在Out文件里面生成批量替换过的文件

           

          

          关键代码如下:

          批量替换的业务实现类

          

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace ReplaceScript
{
    public class ReplaceManager
    {
       public  string InPath = Environment.CurrentDirectory + @"\In";
       public  string OutPath = Environment.CurrentDirectory + @"\Out";
       public List<ReplaceKeyValue> ReplaceValueList { get; set; }
       public string TargetFileName { get; set; }
       public string ReplaceFileName { get; set; }
       public bool IsReplaceFileName { get; set; }
        /// <summary>
        /// 替换 
        /// </summary>
        /// <param name="targetKeyWord"></param>
        /// <param name="ReplaceKeyWord"></param>
        /// <param name="filePath"></param>
        public static void ReplaceScript(List<ReplaceKeyValue> list, string filePath, string SavePath)
        {
            if (list == null || list.Count == 0)
                return;
            string content = "";
            using (FileStream fs = File.OpenRead(filePath))
            {
                System.Text.Encoding encode = GetType(fs);
                content = File.ReadAllText(filePath, encode);
            }
            //replace all 
            foreach (var item in list)
            {
                content = content.Replace(item.targetKeyWord, item.replaceKeyWord);
            }
            //save file
            File.WriteAllText(SavePath, content, Encoding.Default);
        }
        /// <summary>
        /// 获得替换列表
        /// </summary>
        /// <returns></returns>
        public static List<ReplaceKeyValue> GetReplaceKeyValue()
        {
            Console.WriteLine("***************这是华丽的分割线*******************");
            Console.WriteLine("步骤二: 输入文件内容中要替换的查找字符串和替换字符串,以=分割,左边表示要查找的内容,右边表示要替换为的内容 以回车结束输入");
            
            List<ReplaceKeyValue> list = new List<ReplaceKeyValue>();
            string _targetKeyWord = "";
            while (_targetKeyWord != "*")
            {
                Console.WriteLine("请输入要查找的内容和替换为的内容用=号分割 并回车,或者输入一个*并回车结束输入");
                var instr = Console.ReadLine();
                if (instr == "*")
                    break;
                var strArray = instr.Split('=');
                if (strArray.Length < 2)
                {
                    Console.WriteLine("刚输入的没=号,骗子啊");
                    continue;
                }
                list.Add(new ReplaceKeyValue {  targetKeyWord = strArray[0], replaceKeyWord = strArray[1] });
            }
            Console.WriteLine("*******下面开始批量替换了,按任意按键开始************");
            Console.ReadKey();
            return list;
        }
        /// <summary>
        /// 获得当前文件夹下的所有文件及其相关信息
        /// </summary>
        /// <param name="dir"></param>
        /// <returns></returns>
        public static List<string> GetAll(DirectoryInfo dir)//搜索文件夹中的文件
        {
            List<string> FileList = new List<string>();
            FileInfo[] allFile = dir.GetFiles();
            foreach (FileInfo file in allFile)
            {
                FileList.Add(file.FullName);
            }

            DirectoryInfo[] allDir = dir.GetDirectories();
            foreach (DirectoryInfo d in allDir)
            {
                FileList.AddRange(GetAll(d));
            }
            return FileList;
        }
        /// <summary>
        /// Get Files Encoding
        /// </summary>
        /// <param name="fs"></param>
        /// <returns></returns>
        private static System.Text.Encoding GetType(FileStream fs)
        {
            BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);
            byte[] ss = r.ReadBytes(4);
            //编码类型 Coding=编码类型.ASCII;   
            if (ss[0] <= 0xEF)
            {
                if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)
                {
                    return System.Text.Encoding.UTF8;
                }
                else
                    if (ss[0] == 0xFE && ss[1] == 0xFF)
                {
                    return System.Text.Encoding.BigEndianUnicode;
                }
                else
                        if (ss[0] == 0xFF && ss[1] == 0xFE)
                {
                    return System.Text.Encoding.Unicode;
                }
                else
                {
                    return System.Text.Encoding.Default;
                }
            }
            else
            {
                return System.Text.Encoding.Default;
            }
        }
        /// <summary>
        /// 替换用
        /// </summary>
        public  void Replace()
        {    
            List<string> fileList = new List<string>();
            DirectoryInfo dir = new DirectoryInfo(InPath);
            fileList = ReplaceManager.GetAll(dir);
            
            string SaveFilePath = "";
            foreach (var file in fileList)
            {
                if (this.IsReplaceFileName == true)
                {
                    SaveFilePath = OutPath + @"\" + Path.GetFileName(file).Replace(this.TargetFileName, this.ReplaceFileName);
                }
                else
                    SaveFilePath = OutPath + @"\" + Path.GetFileName(file);
                ReplaceManager.ReplaceScript(this.ReplaceValueList, file, SaveFilePath);
            }
        }
    }
    /// <summary>
    /// 替换的键值对
    /// </summary>
    public class ReplaceKeyValue
    {
        /// <summary>
        /// 目标值
        /// </summary>
        public string targetKeyWord { get; set; }
        /// <summary>
        /// 替换值
        /// </summary>
        public string replaceKeyWord { get; set; }
    }
}
            界面代码

           

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace ReplaceForm
{
    public partial class Form1 : Form
    {
        private int rows = 1; //get the contentpanel rows count
        private ReplaceScript.ReplaceManager replaceMag;
        public Form1()
        {
            InitializeComponent();
            this.replaceMag = new ReplaceScript.ReplaceManager();
            this.replaceMag.ReplaceValueList = new List<ReplaceScript.ReplaceKeyValue>();
            this.plLeft.Dock = DockStyle.Fill;
            this.plMiddle.Dock = DockStyle.None;
            this.plRight.Dock = DockStyle.None;
            this.plLeft.Visible = true;
            this.plMiddle.Visible = false;
            this.plRight.Visible = false;
            this.btn2.Visible = false;
            //data bind
            ReplaceScript.ReplaceKeyValue replaceValue = new ReplaceScript.ReplaceKeyValue();
            this.tbOldContent.DataBindings.Add("Text", replaceValue, "targetKeyWord"); // Data Binding
            this.tbnewContent.DataBindings.Add("Text", replaceValue, "replaceKeyWord"); // Data Binding
            this.CB_File.DataBindings.Add("Checked", this.replaceMag, "IsReplaceFileName"); //Data Binding
            this.replaceMag.ReplaceValueList.Add(replaceValue);
        }

        private void CB_File_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox box = sender as CheckBox;
            if (box.Checked == true)
            {
                this.plFileName.Visible = true;
                this.plContent.Visible = true;
              //  this.plFileName.Location = new Point(this.plContent.Location.X,this.plContent.Location.Y);
            }
            else
            {
                this.plContent.Visible = true;
                this.plFileName.Visible = false;
             //   this.plContent.Location = new Point(this.plFileName.Location.X, this.plFileName.Location.Y);
            }
        }

        private void CB_Content_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox box = sender as CheckBox;
            if (box.Checked == true)
            {
                this.plContent.Visible = true;
                this.plFileName.Visible = true;
              //  this.plContent.Location = new Point(this.plFileName.Location.X, this.plFileName.Location.Y);
            }
            else
            {
                
                this.plFileName.Visible = true;
                this.plContent.Visible = false;
              //  this.plFileName.Location = new Point(this.plContent.Location.X, this.plContent.Location.Y);
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            ReplaceScript.ReplaceKeyValue replaceValue = new ReplaceScript.ReplaceKeyValue();
            //label
            Label label = new Label();
            label.Text = this.lbContent.Text;

            label.Location = new System.Drawing.Point(lbContent.Location.X,lbContent.Location.Y+25*rows);
            label.Size = new System.Drawing.Size(lbContent.Size.Width,lbContent.Size.Height);
            this.plContent.Controls.Add(label);

            //textBox oldContent
            TextBox textBoxOld = new TextBox();
            textBoxOld.Location = new System.Drawing.Point(tbOldContent.Location.X, tbOldContent.Location.Y + 25 * rows);
            textBoxOld.Size = new System.Drawing.Size(tbOldContent.Size.Width, tbOldContent.Size.Height);
            textBoxOld.Name = tbOldContent.Name + rows.ToString();
            textBoxOld.DataBindings.Add("Text", replaceValue, "targetKeyWord"); // Data Binding
            this.plContent.Controls.Add(textBoxOld);

            // label =>
            Label labelReplace = new Label();
            labelReplace.Text = this.label2.Text;
            labelReplace.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            labelReplace.ForeColor = System.Drawing.Color.Lime;
            labelReplace.Location = new System.Drawing.Point(label2.Location.X, label2.Location.Y + 25 * rows);
            labelReplace.Size = new System.Drawing.Size(label2.Size.Width, label2.Size.Height);
            this.plContent.Controls.Add(labelReplace);

            //textBox newContent
            TextBox textBoxNew = new TextBox();
            textBoxNew.Location = new System.Drawing.Point(tbnewContent.Location.X, tbnewContent.Location.Y + 25 * rows);
            textBoxNew.Size = new System.Drawing.Size(tbnewContent.Size.Width, tbnewContent.Size.Height);
            textBoxNew.Name = tbnewContent.Name + rows.ToString();
            textBoxNew.DataBindings.Add("Text", replaceValue, "replaceKeyWord"); // Data Binding
            this.plContent.Controls.Add(textBoxNew);

            //add replaceValue
            this.replaceMag.ReplaceValueList.Add(replaceValue);
            //label rows
            //label
            Label labelr = new Label();
            labelr.Text = (rows+1).ToString();
            labelr.AutoSize = true;
            labelr.Location = new System.Drawing.Point(this.lbrows.Location.X, lbrows.Location.Y + 25 * rows);
            labelr.Size = new System.Drawing.Size(lbrows.Size.Width, lbrows.Size.Height);
            this.plContent.Controls.Add(labelr);

            //move button location
            this.btnAdd.Location = new System.Drawing.Point(btnAdd.Location.X, btnAdd.Location.Y + 25);
            this.rows++;

            //set plContent autoScroll
            this.plContent.AutoScrollPosition = new System.Drawing.Point(this.plContent.AutoScrollPosition.X, this.btnAdd.Location.Y+25*rows);
        }

        private bool VerificationAndGetValues()
        {
            TextBox  box;
            int rows = 1;
            if (this.replaceMag.IsReplaceFileName == true)
            {
                if (this.tbOldName.Text.Trim().Length == 0 || this.tbNewName.Text.Trim().Length == 0)
                {
                    MessageBox.Show(string.Format("文件名查找或替换输入框不能为空!"));
                    return false;
                }
                this.replaceMag.TargetFileName = this.tbOldName.Text.Trim();
                this.replaceMag.ReplaceFileName = this.tbnewContent.Text.Trim();
            }

            foreach (var item in this.plContent.Controls)
            {
                if (item.GetType().Equals(typeof(TextBox)))
                {
                    box = item as TextBox;
                      if (box.Name.StartsWith(this.tbnewContent.Name))
                      {
                           if (box.Text.Length == 0)
                           {
                                int.TryParse(box.Name.Replace(this.tbnewContent.Name, string.Empty), out rows);
                                MessageBox.Show(string.Format("第{0}行替换内容输入框不能为空!", rows == 0 ? 1 : rows));
                                return false;
                           }
                      }
                      if (box.Name.StartsWith(this.tbOldContent.Name))
                      {
                          if (box.Text.Length == 0)
                          {
                              int.TryParse(box.Name.Replace(this.tbOldContent.Name, string.Empty), out rows); //First rows will get rows=0!
                              MessageBox.Show(string.Format("第{0}行查找内容输入框不能为空!", rows == 0 ? 1 : rows));
                              return false;
                          }
                      }
                }
            }
            return true;
        }

        //private bool VerificationAndGetValues()
        //{
        //    TextBox box;
        //    int rows = 1;
        //    this.replaceMag.ReplaceValueList.Clear();
        //    ReplaceScript.ReplaceKeyValue replaceValue = new ReplaceScript.ReplaceKeyValue();
        //    foreach (var item in this.plContent.Controls)
        //    {
        //        if (item.GetType().Equals(typeof(TextBox)))
        //        {
        //            box = item as TextBox;
        //            if (box.Name.StartsWith(this.tbnewContent.Name))
        //            {
        //                if (box.Text.Length == 0)
        //                {
        //                    int.TryParse(box.Name.Replace(this.tbnewContent.Name, string.Empty), out rows);
        //                    MessageBox.Show(string.Format("第{0}行替换内容输入框不能为空!", rows == 0 ? 1 : rows));
        //                    return false;
        //                }
        //                else
        //                {
        //                    replaceValue = new ReplaceScript.ReplaceKeyValue();
        //                    this.replaceMag.ReplaceValueList.Add(replaceValue);
        //                    this.replaceMag.ReplaceValueList[this.replaceMag.ReplaceValueList.Count - 1].replaceKeyWord = box.Text.Trim(); //a little dangerous
        //                }
        //            }
        //            if (box.Name.StartsWith(this.tbOldContent.Name))
        //            {
        //                if (box.Text.Length == 0)
        //                {
        //                    int.TryParse(box.Name.Replace(this.tbOldContent.Name, string.Empty), out rows); //First rows will get rows=0!
        //                    MessageBox.Show(string.Format("第{0}行查找内容输入框不能为空!", rows == 0 ? 1 : rows));
        //                    return false;
        //                }
        //                else
        //                {
        //                    replaceValue.targetKeyWord = box.Text.Trim();
        //                }
        //            }
        //        }
        //    }
        //    return true;
        //}

        private void tbOldName_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void tbNewName_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void btnReplace_Click(object sender, EventArgs e)
        {
            bool result =  this.VerificationAndGetValues();
            if (result == false)
            {
                this.btn3.Visible = false;
                return;
            }
            this.replaceMag.Replace();
            this.btn3.Visible = true;
            this.btn3_Click(null,null);
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            if (Directory.Exists(this.replaceMag.InPath) == false)
                Directory.CreateDirectory(this.replaceMag.InPath);
            if (Directory.Exists(this.replaceMag.OutPath) == false)
                Directory.CreateDirectory(this.replaceMag.OutPath);
            System.Diagnostics.Process.Start(this.replaceMag.InPath);
        }

        private void btn1_Click(object sender, EventArgs e)
        {

            if (sender !=null&& Directory.Exists(this.replaceMag.InPath)&& Directory.GetFiles(this.replaceMag.InPath).Length == 0 )
            {
                MessageBox.Show(string.Format("请将要查找的文件拷贝到弹出的文件夹里面!"));
                return;
            }

            this.plLeft.Dock = DockStyle.Fill;
            this.plMiddle.Dock = DockStyle.None;
            this.plRight.Dock = DockStyle.None;
            this.plLeft.Visible = true;
            this.plMiddle.Visible = false;
            this.plRight.Visible = false;
            this.btn2.Visible = true;
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            this.plLeft.Dock = DockStyle.None;
            this.plMiddle.Dock = DockStyle.Fill;
            this.plRight.Dock = DockStyle.None;
            this.plLeft.Visible = false;
            this.plMiddle.Visible = true;
            this.plRight.Visible = false;
            //this.plContent.Visible = true;
        }

        private void btn3_Click(object sender, EventArgs e)
        {
            this.plLeft.Dock = DockStyle.None;
            this.plMiddle.Dock = DockStyle.None;
            this.plRight.Dock = DockStyle.Fill;
            this.plLeft.Visible = false;
            this.plMiddle.Visible = false;
            this.plRight.Visible = true;
        }

        private void btnOut_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(this.replaceMag.OutPath);
        }
    }
}
          源代码下载:  http://download.csdn.net/detail/asa_jim/8976485  新号 没分 收5分 不算过分吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨4点5杀老大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值