C#遍历所有文件夹处理

来源:互联网 发布:口袋操作系统 linux 编辑:程序博客网 时间:2024/04/28 04:03

说明:

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


运行如下所示:


0 0
原创粉丝点击