C#-INI文件基础操作类

首先添加引用:

using System.Runtime.InteropServices;

声明外部实现方法:

[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);

构造函数:

string path;
public INI(string path)
{
    this.path = path;
}

写入键值:

/// <summary>
/// 写入键值
/// </summary>
public void IniWriteValue(string section, string key, string value)
{
    WritePrivateProfileString(section, key, value, path);
}

读取到字节数组:

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

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

/// <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();
}

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

/// <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);
}

重命名段落或键:

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

判断段落或键是否存在:

/// <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 @ 2023-07-25 18:24  [春风十里]  阅读(14)  评论(0编辑  收藏  举报