Unity(c#)读取ini配置 - 纳金网
联系我们

给我们留言

联系我们

地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网

邮箱:info@narkii.com

电话:0595-82682267

(周一到周五, 周六周日休息)

当前位置:主页 > 3D教程 > 图文教程

Unity(c#)读取ini配置

来源: 未知 | 责任编辑:六月芳菲 | 发布时间: 2018-03-02 09:43 | 浏览量:
更多精彩unity教程:http://www.narkii.com/resource/

话不多说,直接上源码,整个库只有这一个文件
代码基于.net2.0,不依赖任何库,所有c# 版本均可使用,包括 unity
支持注释,// 和 /* */ 两种均可使用
可以根据当前的数据获得ini的字符串
 
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
/// <summary> 单个模块数据 </summary>
public class ScorpioIniSection {
    /// <summary> 所有数据 </summary>
    public Dictionary<string, ScorpioIniValue> datas = new Dictionary<string, ScorpioIniValue>();
    /// <summary> 设置值 </summary>
    public void Set(string key, string value, string comment) {
        if (!datas.ContainsKey(key))
            datas.Add(key, new ScorpioIniValue());
        datas[key].Set(value, comment);
    }
    /// <summary> 获得值 </summary>
    public ScorpioIniValue Get(string key) {
        if (datas.ContainsKey(key))
            return datas[key];
        return null;
    }
    /// <summary> 删除值 </summary>
    public void Remove(string key) {
        if (datas.ContainsKey(key)) {
            datas.Remove(key);
        }
    }
}
/// <summary> 具体数据 </summary>
public class ScorpioIniValue {
    /// <summary> 值 </summary>
    public string value;
    /// <summary> 注释 </summary>
    public string comment;
    /// <summary> 设置值 </summary>
    public void Set(string value, string comment) {
        if (value != null)
            this.value = value;
        if (comment != null)
            this.comment = comment;
    }
}
/// <summary> 读取ini文件 </summary>
public class ScorpioIni {
    /// <summary> 所有数据 </summary>
    public Dictionary<string, ScorpioIniSection> m_ConfigData = new Dictionary<string, ScorpioIniSection>();
    /// <summary> 构造函数 </summary>
    public ScorpioIni() { }
    /// <summary> 构造函数 </summary>
    public ScorpioIni(byte[] bytes, Encoding encoding) {
        InitFormBuffer(bytes, encoding);
    }
    public ScorpioIni(string file, Encoding encoding) {
        InitFormFile(file, encoding);
    }
    /// <summary> 构造函数 </summary>
    public ScorpioIni(string data) {
        InitFormString(data);
    }
    /// <summary> 根据BYTE[]初始化数据 </summary>
    public void InitFormBuffer(byte[] buffer, Encoding encoding) {
        InitFormString(encoding.GetString(buffer, 0, buffer.Length));
    }
    public void InitFormFile(string file, Encoding encoding) {
        using (FileStream fs = new FileStream(file, FileMode.Open)) {
            long length = fs.Length;
            byte[] buffer = new byte[length];
            fs.Read(buffer, 0, (int)length);
            InitFormString(encoding.GetString(buffer));
        }
    }
    /// <summary> 根据string初始化数据 </summary>
    public void InitFormString(string buffer) {
        try {
            m_ConfigData.Clear();
            string[] datas = buffer.Split('\n');
            string section = "";
            bool startComment = false;
            StringBuilder comment = new StringBuilder();
            int count = datas.Length;
            for (int i = 0; i < count; ++i) {
                string data = datas[i].Trim();
                if (!string.IsNullOrEmpty(data)) {
                    // /* */为区域注释
                    if (data.StartsWith("/*")) {
                        comment.Append(data.Replace(@"/*", "").Replace(@"*/", ""));
                        if (data.EndsWith("*/")) {
                            startComment = false;
                            continue;
                        }
                        startComment = true;
                        continue;
                    }
                    // */ 为区域注释结尾
                    else if (data.EndsWith("*/")) {
                        comment.Append(data.Replace(@"/*", "").Replace(@"*/", ""));
                        startComment = false;
                        continue;
                    }
                    // //为行注释
                    else if (data.StartsWith("//")) {
                        comment.Append(data.Replace(@"//", ""));
                        continue;
                    }
                    if (startComment == true) {
                        continue;
                    }
                    if (data.StartsWith("[")) {
                        int indexLeft = data.IndexOf("[");
                        int indexRight = data.IndexOf("]");
                        if (indexLeft >= 0 && indexRight >= 0) {
                            section = data.Substring(indexLeft + 1, indexRight - indexLeft - 1);
                        }
                    } else {
                        int index = data.IndexOf("=");
                        if (index >= 0) {
                            string key = data.Substring(0, index).Trim();
                            string value = data.Substring(index + 1).Trim();
                            Set(section, key, value, comment.ToString());
                            comment = new StringBuilder();
                        } else {
                            throw new Exception((i + 1) + " 行填写错误, 正确格式为 key=value 不支持回车");
                        }
                    }
                }
            }
        } catch (System.Exception e) {
            throw new Exception("initialize is error : " + e.ToString());
        }
    }
    /// <summary> 返回所有数据 </summary>
    public Dictionary<string, ScorpioIniSection> GetData() {
        return m_ConfigData;
    }
    /// <summary> 返回单个模块的数据 </summary>
    public ScorpioIniSection GetSection() {
        return GetSection("");
    }
    /// <summary> 返回单个模块的数据 </summary>
    public ScorpioIniSection GetSection(string section) {
        if (!m_ConfigData.ContainsKey(section))
            return null;
        return m_ConfigData[section];
    }
    /// <summary> 获得Value </summary>
    public string Get(string key) {
        return Get("", key);
    }
    /// <summary> 设置Value </summary>
    public string Get(string section, string key) {
        if (m_ConfigData.Count <= 0)
            return "";
        if (section == null) section = "";
        if (!m_ConfigData.ContainsKey(section))
            return "";
        var configValue = m_ConfigData[section].Get(key);
        return configValue != null ? configValue.value : "";
    }
    public ScorpioIniValue GetValue(string key) {
        return GetValue("", key);
    }
    /// <summary> 设置Value </summary>
    public ScorpioIniValue GetValue(string section, string key) {
        if (m_ConfigData.Count <= 0)
            return null;
        if (section == null) section = "";
        if (!m_ConfigData.ContainsKey(section))
            return null;
        return m_ConfigData[section].Get(key);
    }
    /// <summary> 设置Value </summary>
    public void Set(string key, string value) {
        Set("", key, value);
    }
    /// <summary> 设置Value </summary>
    public void Set(string section, string key, string value) {
        Set(section, key, value, null);
    }
    /// <summary> 设置Value </summary>
    public void Set(string section, string key, string value, string comment) {
        if (!m_ConfigData.ContainsKey(section))
            m_ConfigData.Add(section, new ScorpioIniSection());
        m_ConfigData[section].Set(key, value, comment);
    }
    /// <summary> 删除Key </summary>
    public void Remove(string key) {
        Remove("", key);
    }
    /// <summary> 删除Key </summary>
    public void Remove(string section, string key) {
        if (m_ConfigData.ContainsKey(section))
            m_ConfigData[section].Remove(key);
    }
    /// <summary> 清空一个模块 </summary>
    public void ClearSection() {
        ClearSection("");
    }
    /// <summary> 清空一个模块 </summary>
    public void ClearSection(string section) {
        if (m_ConfigData.ContainsKey(section))
            m_ConfigData.Remove(section);
    }
    /// <summary> 清空所有数据 </summary>
    public void ClearData() {
        m_ConfigData.Clear();
    }
    /// <summary> 返回数据字符串 </summary>
    public string GetString() {
        SortedDictionary<string, ScorpioIniSection> data = new SortedDictionary<string, ScorpioIniSection>(m_ConfigData);
        StringBuilder builder = new StringBuilder();
        if (data.ContainsKey("")) {
            foreach (var val in data[""].datas) {
                var configValue = val.Value;
                if (!string.IsNullOrEmpty(configValue.comment))
                    builder.AppendLine(string.Format("/*{0}*/", configValue.comment));
                builder.AppendLine(string.Format("{0}={1}", val.Key, configValue.value));
            }
        }
        foreach (var pair in data) {
            if (string.IsNullOrEmpty(pair.Key))
                continue;
            builder.AppendLine(string.Format("[{0}]", pair.Key));
            foreach (var val in pair.Value.datas) {
                var configValue = val.Value;
                if (!string.IsNullOrEmpty(configValue.comment))
                    builder.AppendLine(string.Format("/*{0}*/", configValue.comment));
                builder.AppendLine(string.Format("{0}={1}", val.Key, configValue.value));
            }
        }
        return builder.ToString();
    }
}
下面是示例ini
//  // 和 /* */ 可以当作注释
/*这种是默认命名空间*/
key1 = value1
[sec1]
//这种是sec1里的值
key1 = value1sec1
 
更多精彩unity教程:http://www.narkii.com/resource/

相关文章
网友评论

您需要登录后才可以发帖 登录 | 立即注册

关闭

全部评论:0条

推荐
热门