首页 > 其他 > 详细

ini 设置文件 生成 与 读取

时间:2021-05-06 09:33:55      阅读:16      评论:0      收藏:0      [点我收藏+]

 

/// <summary>
/// ini 设置文件 生成 与 读取
/// </summary>
public static class Inier
{
    #region 使用方法

    //先要用 IniDt() 函数 初始化 需要使用的设置记录表,因为:此程序是按指定的数据列进行存取

    #endregion

    #region

    public static char vluSpliter = ‘=‘;
    /// <summary>
    /// 指定数据列
    /// </summary>
    public static class ECol
    {
        public static string nam = "nam";
        public static string vlu = "vlu";
        public static string grp = "grp";
        /// <summary>
        /// 标识: 0=old,1=upd,2=apd
        /// </summary>
        public static string sig = "sig";
        public static string[] namS = new string[] { nam, vlu, grp, sig };
    }
    /// <summary>
    /// 数据列相关标识,即在使用过程中对数据操作的变化标识,并存放于 sig 列中,用于以提高 对 ini 数据的全新写入还是追加写入
    /// </summary>
    public static class Esig
    {
        /// <summary>
        /// 原数据
        /// </summary>
        public static int old = 0;
        /// <summary>
        /// 修改,有修改,则采用全新写入
        /// </summary>
        public static int upd = 1;
        /// <summary>
        /// 新增,有新增,但没有修改的情况下,采用追加写入 ini 文件
        /// </summary>
        public static int apd = 2;
    }
    /// <summary>
    /// [ 能使用此类的第一步 ] 初始化 iniDt 列名: { nam,vlu,par,sig};
    /// </summary>
    /// <returns></returns>
    public static DataTable IniDt()
    {
        DataTable dt = new DataTable();
        len = ECol.namS.Length;
        string str;
        for (int i = 0; i < len; i++)
        {
            str = ECol.namS[i];
            dt.Columns.Add(str);
        }
        return dt;
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sigS"></param>
    /// <param name="grpS"></param>
    /// <returns></returns>
    private static DataTable IniDt(string[] sigS, string[] grpS)
    {
        DataTable dt=new DataTable();// = IniDt();
        //int len = sigS.Length;

        ////if (grpS.Length < len)
        //// len = grpS.Length;

        //for (int i = 0; i < len; i++)
        //{
        // dr = dt.NewRow();
        // dr[ECol.nam] = sigS[i];
        // dr[ECol.par] = grpS[i];
        // dt.Rows.Add(dr);
        //}
        return dt;
    }
    /// <summary>
    /// 添加行至 iniDt 中
    /// </summary>
    /// <param name="nam">参数名称</param>
    /// <param name="grp">参数组名称</param>
    /// <param name="vlu">参数值</param>
    /// <param name="iniDt"></param>
    public static void AddRow(string nam, string grp, string vlu, ref DataTable iniDt)
    {
        drS = iniDt.Select(ECol.nam + "=‘" + nam + "‘");
        len = drS.Length;
        if (len < 1)
        {
            dr = iniDt.NewRow();
            iniDt.Rows.Add(dr);

            dr[ECol.nam] = nam;
            dr[ECol.sig] = Esig.apd;
        }
        else
        {
            dr = drS[0];
            dr[ECol.sig] = Esig.upd;
        }
        dr[ECol.vlu] = vlu;
        dr[ECol.grp] = grp;
    }
    /// <summary>
    /// 按 数据表 写入 参数 数据 到文本,由此程序 根据 iniDt 中的 sig 列值 判断是追加写入,还是全新写入
    /// </summary>
    /// <param name="iniDt">数据表</param>
    /// <param name="iniPth"></param>
    public static void WrtIni(DataTable iniDt, string txtPth)
    {
        string namVlus = "";
        drS = iniDt.Select(ECol.sig + "=" + Esig.upd);
        string grping = "";
        len = drS.Length;
        if (len > 0)
        {
            #region 有修改,重写

            len = iniDt.Rows.Count;
            for (int i = 0; i < len; i++)
            {
                if (i > 0)
                    namVlus += c.n;

                if (dr[ECol.grp] + "" != grping)
                {
                    grping = dr[ECol.grp] + "";
                    namVlus += "[" + grping + "]"+c.n;
                }

                dr = iniDt.Rows[i];
                namVlus += dr[ECol.nam] + "";
                namVlus += vluSpliter +"" + dr[ECol.vlu];
            }

            F.IO.Sw.New(txtPth, namVlus, Encoding.Default);

            #endregion
        }
        else
        {
            #region 只有新增,追加

            drS = iniDt.Select(ECol.sig + "=" + Esig.apd);
            len = drS.Length;
            if (len < 1)
                return;

            for (int i = 0; i < len; i++)
            {
                dr = drS[i];

                namVlus += c.n;

                if (dr[ECol.grp] + "" != grping)
                {
                    grping = dr[ECol.grp] + "";
                    namVlus += "[" + grping + "]"+c.n;
                }

                namVlus += dr[ECol.nam] + "";
                namVlus += vluSpliter+ "" + dr[ECol.vlu];
            }

            F.IO.Sw.Apd(txtPth, cs.n + namVlus, Encoding.Default);

            #endregion
        }
    }
    /// <summary>
    /// 读取 行列数据 文本到 iniDt 中,并初始化 sig 列值为 Esig.old
    /// </summary>
    /// <param name="iniPth"></param>
    /// <param name="iniDt"></param>
    public static void RedIni(string iniPth, List<string> sigL,List<string> grpL, ref DataTable iniDt)
    {
        if (!File.Exists(iniPth))
            return;

        List<string> namVluL = F.Fil.Txt.ReadAry(iniPth, Encoding.Default, true);

        int len = namVluL.Count;
        if (len < 1)
            return;

        string namVlu,nam;
        string[] celS;
        int j, k,idx;
        char chr;
        string grping = "";
        for (int i = 0; i < len; i++)
        {
            namVlu = namVluL[i];
            if (namVlu == "")
                continue;

            chr = namVlu[0];
            if (chr == ‘[‘)
            {
                grping = "";
                for (k = 1; k < namVlu.Length - 1; k++)
                    grping += namVlu[k];

                if (grping != "")
                {
                    idx = grpL.IndexOf(grping);
                    if (idx < 0)
                        grping = "";
                }

                continue;
            }

            if (grping == "")
                continue;//跳过分组不存在的参数行

            celS = namVlu.Split(vluSpliter);
            j = 0;
            nam = celS[j];

            idx = sigL.IndexOf(nam);
            if (idx < 0)
                continue;//跳过参数名称不存在的参数行

            if (grpL[idx] != grping)
                continue;//跳过参数组名称不存在的参数行

            dr = iniDt.NewRow();
            dr[ECol.nam] = nam;

            j++;
            vlu = "";
            for (;j<celS.Length;j++)
            {
                if (vlu != "")
                    vlu += vluSpliter;

                vlu += celS[j];
            }

            dr[ECol.vlu] = vlu;
            dr[ECol.grp] = grping;
            dr[ECol.sig] = Esig.old;

            iniDt.Rows.Add(dr);
        }
    }

    #endregion
}

  

交流 QQ : 2412366909@qq.com
手机号码:177-7499-4428

注:本人使用过程中暂未发现造成存取不正确的问题

ini 设置文件 生成 与 读取

原文:https://www.cnblogs.com/grCod/p/14733415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!