/// <summary> /// 获取所有源 /// </summary> /// <returns></returns> private List <Source> GetSources() { //获取所有配置文件 DirectoryInfo directory = new DirectoryInfo(cache.sourceFolder); FileInfo[] files = directory.GetFiles("*.*", SearchOption.AllDirectories); //可选选项 string sv; string lf; //源 List <Source> sources = new List <Source>(); for (int i = 0, l = files.Length; i < l; i++) { FileInfo file = files[i]; if (file.Extension != ".txt" && file.Extension != ".csv") { continue; } Source source = new Source(); string content; byte[] bytes; ConfigTools.ReadFile(file.FullName, out bytes); ConfigTools.DetectTextEncoding(bytes, out content);//转换不同的编码格式 //判断换行符 if (content.IndexOf("\r\n") != -1) { lf = "\r\n"; } else { lf = "\n"; } //判断分割符 if (content.IndexOf("\t") != -1) { sv = "\t"; } else { sv = ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)";//Fork:https://stackoverflow.com/questions/6542996/how-to-split-csv-whose-columns-may-contain } //写入源 source.content = content; source.sourceName = file.Name.Replace(file.Extension, ""); //文件名 source.configName = source.sourceName + "Config"; //类名 source.matrix = ConfigTools.Content2Matrix(source.content, sv, lf, out source.row, out source.column); sources.Add(source); } return(sources); }
/// <summary> /// 获取所有源 /// </summary> /// <returns></returns> private void GetSources(out List <SheetSource> sheets, out List <StructSource> structs) { //获取所有配置文件 DirectoryInfo directory = new DirectoryInfo(cache.sourceFolder); FileInfo[] files = directory.GetFiles("*.*", SearchOption.AllDirectories); //源 sheets = new List <SheetSource>(); structs = new List <StructSource>(); for (int i = 0, l = files.Length; i < l; i++) { FileInfo file = files[i]; if (IsTemporaryFile(file.Name))//临时文件 { continue; } OriginalType type; if (!TypeEnabled(file.Extension, out type)) { continue; } //可以同时读流 FileStream fileStream = file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); ExcelWorksheet excelData = null; string content = ""; //读取Excel if (type == OriginalType.Xlsx) { ExcelPackage package = new ExcelPackage(fileStream); excelData = package.Workbook.Worksheets[1]; fileStream.Close(); } //其他 else { //读Byte byte[] bytes; BinaryReader br = new BinaryReader(fileStream); bytes = br.ReadBytes((int)fileStream.Length); StreamReader renderer = new StreamReader(fileStream); content = renderer.ReadToEnd(); ConfigTools.DetectTextEncoding(bytes, out content);//转换不同的编码格式 if (string.IsNullOrEmpty(content)) { Debug.LogWarning(file.Name + "内容为空!"); continue; } } switch (type) { case OriginalType.Txt: case OriginalType.Csv: try { SheetSource source = SheetParser.Parse(content, file.Name); sheets.Add(source); } catch (Exception e) { UnityEngine.Debug.LogError(file.Name + "解析失败!请检查格式是否正确,如果格式正确请联系作者:https://github.com/RickJiangShu/ConfigManager/issues" + "\n" + e); } break; case OriginalType.Json: try { StructSource st = JsonParser.Parse(content, file.Name); structs.Add(st); } catch (Exception e) { UnityEngine.Debug.LogError(file.Name + "解析失败!请检查格式是否正确,如果格式正确请联系作者:https://github.com/RickJiangShu/ConfigManager/issues" + "\n" + e); } break; case OriginalType.Xml: try { StructSource st = XmlParser.Parse(content, file.Name); structs.Add(st); } catch (Exception e) { UnityEngine.Debug.LogError(file.Name + "解析失败!请检查格式是否正确,如果格式正确请联系作者:https://github.com/RickJiangShu/ConfigManager/issues" + "\n" + e); } break; case OriginalType.Xlsx: try { SheetSource st = SheetParser.Parse(excelData, file.Name); sheets.Add(st); } catch (Exception e) { UnityEngine.Debug.LogError(file.Name + "解析失败!请检查格式是否正确,如果格式正确请联系作者:https://github.com/RickJiangShu/ConfigManager/issues" + "\n" + e); } break; } } }