/// <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
注:本人使用过程中暂未发现造成存取不正确的问题
原文:https://www.cnblogs.com/grCod/p/14733415.html