C#遍历所有文件夹处理

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aiyan1111111/article/details/53761158

说明:

某日某天的某个时候,程序出现了日狗的情况,不得不对所有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();
            }
        }


运行如下所示:


展开阅读全文

没有更多推荐了,返回首页