using UnityEngine; using System.Collections.Generic; using System.Reflection; using LuaInterface; using System; using System.IO; using System.Text; using System.Text.RegularExpressions; namespace LuaFramework { public static class FileTools { private static List paths = new List(); private static StringBuilder files = new StringBuilder(); private static List str = new List(); private static List cfg_names_list = new List(); private static List fina_list = new List(); //返回的是内容组成的字符串 public static string GetPathFiles(string path, string pre = "", string match_str = "") { paths.Clear(); files.Clear(); if (Directory.Exists(path)) { Recursive(path, pre, match_str); } else { files.Append("null"); } return files.ToString(); } //判断路径是否存在 public static bool CheckPathExists(string path) { bool has_path = false; has_path = Directory.Exists(path); return has_path; } /// 遍历目录及其子目录 pre是只有包含这个符号的才会添加 private static void Recursive(string path, string pre, string match_str) { string[] names = Directory.GetFiles(path); string[] dirs = Directory.GetDirectories(path); foreach (string filename in names) { string ext = Path.GetExtension(filename); if (!ext.Equals(match_str)) continue; if (pre != "" && !filename.Contains(pre)) continue; string real_name = filename.Replace('\\', '/'); files.Append(real_name); files.Append("\n"); } foreach (string dir in dirs) { paths.Add(dir.Replace('\\', '/')); Recursive(dir, pre, match_str); } } public static void OutPutValue(string file_name, string value_str) { str.Clear(); if (!string.IsNullOrEmpty(value_str)) { string[] str_list = value_str.Split('&'); foreach (string s in str_list) { str.Add(s); } if (str.Count >= 0) { try { //string root_str = Application.dataPath; //if (!Application.isEditor) //{ // root_str = root_str.Replace("ClientApp_Data", ""); // root_str = root_str.Replace("localTest", ""); // root_str = root_str.Replace("app", ""); //} //root_str = root_str.Replace("Assets", ""); //string target_path = root_str + "/" + file_name + ".csv"; string target_path = Application.dataPath.Replace("Assets", "") + "/" + file_name + ".csv"; File.WriteAllLines(target_path, str.ToArray(), Encoding.GetEncoding("GB2312")); } catch (Exception e) { throw; } } } } public static void MatchCfg(string path, string pre = "", string match_str = "", string Config = "") { paths.Clear(); files.Clear(); cfg_names_list.Clear(); fina_list.Clear(); byte[] bytes = new byte[1024 * 1024]; string root_path = Application.dataPath; if (Directory.Exists(path)) { Recursive(path, pre, match_str); } else { files.Append("null"); } if (files.Length > 0) { string str = files.ToString(); string[] arr = str.Split('\n'); for (int i = 0; i < arr.Length; i++) { string cfg_path = arr[i]; string[] arr2 = Regex.Split(cfg_path, "Lua/", RegexOptions.IgnoreCase); string s = arr2[arr2.Length - 1].Replace(".lua", "").Replace('/', '.'); cfg_names_list.Add(s); } } Config = Config + ".lua"; if (File.Exists(Config)) { FileStream fs = new FileStream(Config, FileMode.Open); int count = (int)fs.Length; fs.Read(bytes, 0, count); string str = Encoding.UTF8.GetString(bytes); if (!string.IsNullOrEmpty(str)) { string title = "是否引用配置,lua名,配置文件名&"; fina_list.Add(title); for (int i = 0; i < cfg_names_list.Count; i++) { bool use_cfg = str.Contains(cfg_names_list[i]); string desc = ""; if (use_cfg == false) { desc = "未引用此配置"; } string[] arr3 = cfg_names_list[i].Split('.'); string file_name = arr3[arr3.Length - 1]; string name = cfg_names_list[i]; string fina_str = desc + "," + file_name + "," + name + "&"; fina_list.Add(fina_str); } } fs.Close(); } if (fina_list.Count > 0) { string target_path = Application.dataPath.Replace("Assets", "") + "/" + "配置关系表" + ".csv"; File.WriteAllLines(target_path, fina_list.ToArray(), Encoding.GetEncoding("GB2312")); Debug.Log("配置关系表生成完成"); } } } }