C#-INI文件基础操作类

首先添加引用:

1
using System.Runtime.InteropServices;

声明外部实现方法:

1
2
3
4
5
6
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, byte[] retVal, int size, string filePath);

构造函数:

1
2
3
4
5
string path;
public INI(string path)
{
    this.path = path;
}

写入键值:

1
2
3
4
5
6
7
/// <summary>
/// 写入键值
/// </summary>
public void IniWriteValue(string section, string key, string value)
{
    WritePrivateProfileString(section, key, value, path);
}

读取到字节数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// <summary>
/// 读取ini文件,返回byte[]
/// </summary>
private byte[] IniReadValues(string section, string key)
{
    byte[] bs = new byte[2048];
    int i = GetPrivateProfileString(section, key, "", bs, 2048, path);
    return bs;
}
/// <summary>
/// byte[] to string[]
/// </summary>
private string[] ByteToString(byte[] sectionByte)
{
    ASCIIEncoding ascii = new ASCIIEncoding();
    string sections = ascii.GetString(sectionByte);
    string[] sectionList = sections.Split(new char[1] { '\0' });
    return sectionList;
}

读取所有段落,所有键,键值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// <summary>
/// 读取ini文件的所有段落名
/// </summary>
public string[] IniReadValues()
{
    byte[] allSection = IniReadValues(null, null);
    return ByteToString(allSection);
}
/// <summary>
/// 读取ini文件的某段落下的所有键名
/// </summary>
public string[] IniReadValues(string section)
{
    byte[] sectionByte = IniReadValues(section, null);
    return ByteToString(sectionByte);
}
/// <summary>
/// 读取键值,返回字符串
/// </summary>
public string IniReadValue(string section, string key)
{
    StringBuilder sb = new StringBuilder(255);
    int i = GetPrivateProfileString(section, key, "", sb, 255, path);
    return sb.ToString();
}

删除所有段落,指定段落,指定键:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>
/// 删除所有段落
/// </summary>
public void ClearAllSection()
{
    IniWriteValue(null, null, null);
}
/// <summary>
/// 删除文件下指定段落
/// </summary>
public void ClearSection(string section)
{
    IniWriteValue(section, null, null);
}
/// <summary>
/// 删除文件下段落下指定键
/// </summary>
public void ClearSection(string section,string key)
{
    IniWriteValue(section, key, null);
}

重命名段落或键:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/// <summary>
/// 重命名段落
/// </summary>
/// <param name="section"></param>
/// <param name="newName"></param>
/// <returns></returns>
public bool ReNameSection(string section, string newName)
{
    string[] keys = IniReadValues(section);
    foreach (string key in keys)
    {
        if (key == null || key == "")
            break;
        string value = IniReadValue(section, key);
        IniWriteValue(newName, key, value);
    }
    ClearSection(section);
    return true;
}
/// <summary>
/// 重命名键
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="newName"></param>
/// <returns></returns>
public bool ReNameSection(string section, string key, string newName)
{
    string value = IniReadValue(section, key);
    IniWriteValue(section, newName, value);
    ClearSection(section, key);
    return true;
}

判断段落或键是否存在:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
/// 判断段落或键是否存在
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns></returns>
public bool IsExist(string section, string key = "")
{
    if (key == "")
    {
        string[] list = IniReadValues();
        foreach (string l in list)
        {
            if (l == section)
                return true;
        }
    }
    else
    {
        string[] list = IniReadValues(section);
        foreach (string l in list)
        {
            if (l == key)
                return true;
        }
    }
    return false;
}

  

  

  

  

  

  

  

  

posted @   [春风十里]  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示