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

            如题,最近发现页面同功能的不少,遂写了个批量替换的程序,今天下班前,一妹子说想用用,无奈友好性太差,烂成渣,遂今天晚上抽出了两个小时在改友好性提示,无奈 感觉还是渣, 有这方面经验的 提示信息给改改,这么多年貌似还没搞过这么麻烦的控制台程序 哈哈,明天上午就要上供了!

           批量替换功能描述:批量将In文件夹下面的所有文件和文件内容中的 查找字符串 替换成目标字符串,名字也一样,替换后另存到Out文件夹下面。

          适用人群:程序猿 码农神器,前提是 你的代码要有足够的规范度,例如实体名,变量名,页面明明等等。

    

         我的In 文件夹下面的内容,搞asp.net mvc 页面的, 从实体类,视图类,业务类,页面 都有,全部替换个一遍,然后稍加修改就可以用了,这当然是建立在各种编程约定的前提下!

         

          替换后的Out文件夹下面

          

     不仅仅是文件名替换了,内容里面的也替换了! 


         上代码,各种异常没处理,因为没空哭,不过不影响正常使用

       

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


namespace ReplaceScript
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("  说明:本程序用于批量替换In文件夹中的文件,并且将新文件保存到Out文件夹中");
            Console.WriteLine("  要查找的字符串和替换为字符串用=号左右分开,例如将 [张三]替换为[李四]表示为输入 张三=李四 并回车");
            string InPath = Environment.CurrentDirectory + @"\In";
            string OutPath = Environment.CurrentDirectory + @"\Out";
            bool IsReplaceDirName = false;
            Console.WriteLine("步骤一:是否需要替换文件名中的字符串,例如将 北京的夜晚.txt 中北京替换成 郑州,在Out文件夹中生成 郑州的夜晚.txt,需要此功能请输入一个y(大小写均可)并回车");
            Console.WriteLine("         启用文件名替换?(Y/N)");

            if (Console.ReadLine().ToLower() == "y")
                IsReplaceDirName = true;
            string targetKeyWord = "";
            string replaceKeyWord = "";
            if (IsReplaceDirName == true)
            {
                Console.WriteLine("  请输入文件名字中要替换和被替换的内容用=号分割,左边为要查找的字符串,右边为要替换成的字符串例如 北京=郑州 并回车");
                Console.WriteLine("  请输入以回车完成");
                var instr = Console.ReadLine();
                var strArray = instr.Split('=');
                if (strArray.Length < 2)
                {
                    Console.WriteLine("  没输入=按任意键将退出,别捣乱!");
                    return;
                }

                targetKeyWord = strArray[0];
                replaceKeyWord = strArray[1];
            }
            List<string> fileList = new List<string>();
            DirectoryInfo dir = new DirectoryInfo(InPath);
            fileList = GetAll(dir);

            //获得输入的内容替换 对儿
            List<ReplaceKeyValue> list = GetReplaceKeyValue();

            string SavePath = "";
            foreach (var file in fileList)
            {
                SavePath = OutPath + @"\" + Path.GetFileName(file).Replace(targetKeyWord, replaceKeyWord);
                ReplaceScript(list, file, SavePath);
            }
            Console.WriteLine("   任务完成! 此程序正在为 林林 服务,任意键回车结束服务...");
            Console.Read();

        }

        /// <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>
        public 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 class ReplaceKeyValue
    {
        /// <summary>
        /// 目标值
        /// </summary>
        public string targetKeyWord { get; set; }
        /// <summary>
        /// 替换值
        /// </summary>
        public string replaceKeyWord { get; set; }
    }
}

          后续:

              这两天晚上抽出时间做成winform界面,果然好看好用,控制台想谈友好性 我看是痴人说梦!

             

           

          


     移步:http://blog.csdn.net/asa_jim/article/details/47356625

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凌晨4点5杀老大爷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值