C#遍历所有文件夹处理

说明:

某日某天的某个时候,程序出现了日狗的情况,不得不对所有Unity创建的所有.cs脚本进行批处理(修改指定的字符串之类的),光不要说需要修改的.cs脚本有四五十个,一个个的修改不光修改浪费时间,而且害怕处理修改不全面的情况。。。于是乎,只有自己写一个批处理文件的控制台脚本处理所有的.cs脚本。

特别需要说明的是,由于需要遍历的文件太多以及涉及到递归操作,特意使用了线程在C#控制台中处理,在Unity中尝试过运行该脚本,容易出现卡死的情况。

遍历所有的.cs文件

      /// <summary>
        /// 获取所有的.cs文件
        /// </summary>
        public static List<string> FindAllFiles(string fileDicPath)
        {
            if (!Directory.Exists(fileDicPath))
            {
                Console.WriteLine("文件夹不存在");
                return null;
            }
            List<string> fileList = new List<string>();
            //遍历文件夹
            DirectoryInfo theFolder = new DirectoryInfo(fileDicPath);
            FileInfo[] thefileInfo = theFolder.GetFiles("*.cs", SearchOption.TopDirectoryOnly);
            foreach (FileInfo NextFile in thefileInfo)  //遍历文件
                fileList.Add(NextFile.FullName);
            //遍历子文件夹
            DirectoryInfo[] dirInfo = theFolder.GetDirectories();
            foreach (DirectoryInfo NextFolder in dirInfo)
            {
                FileInfo[] fileInfo = NextFolder.GetFiles("*.cs", SearchOption.AllDirectories);
                foreach (FileInfo NextFile in fileInfo)  //遍历文件
                    fileList.Add(NextFile.FullName);
            }
            return fileList;
        }


读取单个.cs文件

/// <summary>
        /// 读取单个的.cs文件内容
        /// </summary>
        static void ReadCSText(string path)
        {
            StreamReader sr = new StreamReader(path, Encoding.Default);
            Console.WriteLine(path);

            string text;
            StringBuilder sb = null;
            if ((text = sr.ReadToEnd()) != null)
            {
                sb = new StringBuilder(text);

                //自行处理读取、修改的操作
                //for (int i = 0; i < ChineseString.Count; i++)
                //{
                //    //Console.WriteLine(ChineseString[i] + "   " + key[i]);
                //    //line.Replace(ChineseString[i], key[i]);
                //    //sb.Replace(ChineseString[i], key[i]);

                //    //sb.Replace(ChineseString[i], key[i]);
                //    sb.Replace("Toast.ShowText(" + key[i], "Toast.ShowText(I2.Loc.LocalizationManager.GetTermTranslation(" + key[i] + ")");
                //}
            }
            sr.Close();
            if (sb != null)
            {
                var str = sb.ToString();
                Console.WriteLine(str);
                StreamWriter sw = new StreamWriter(path, false, Encoding.Default);
                sw.Write(str);
                sw.Flush();
                sw.Close();
            }
            Console.WriteLine("完成");
        }

读取所有的.cs文件

/// <summary>
        /// 读取所有.cs文件的内容
        /// </summary>
        static void ReadAllCSText()
        {
            List<string> listPath = FindAllFiles(DicPath);
            if (listPath == null)
                return;
            foreach (var varPath in listPath)
            {
                ReadCSText(varPath);
            }
        }

以线程的方式读取

static void Main(string[] args)
        {
            //路径自己修改
            //DicPath = "E:/XXQQ_ProjectAssets/";
            t = new Thread(ReadAllCSText);
            t.Start();
            Console.ReadKey();
        }


关闭线程

void OnDestroy()
        {
            if (t != null)
            {
                t.Abort();
            }
        }


运行如下所示:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值