Exemple #1
0
        /// <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;
                }

                ExcelWorksheet excelData = null;
                string         content   = "";

                //读取Excel
                if (type == OriginalType.Xls || type == OriginalType.Xlsx)
                {
                    FileStream   stream  = File.Open(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    ExcelPackage package = new ExcelPackage(stream);
                    excelData = package.Workbook.Worksheets[1];

                    stream.Close();
                }
                //其他
                else
                {
                    byte[] bytes;
                    ConfigTools.ReadFile(file.FullName, out bytes);
                    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.Xls:
                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;
                }
            }
        }