/// <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