using System.Runtime.InteropServices;
namespace ConsoleApp1
{
class iniFile
{
// Windows API 参考手册
// http://www.office-cn.net/t/api/index.html?writeprivateprofilestring.htm
// https://docs.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-writeprivateprofilestringa
[DllImport("kernel32")]
private static extern byte WritePrivateProfileString(string section, string key, string val, string filePath);
// https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofilestring
[DllImport("kernel32")]
private static extern uint GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, uint size, string filePath);
// https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprivateprofilestringa
[DllImport("kernel32")]
private static extern uint GetPrivateProfileStringA(string section, string key, string defVal, byte[] retVal, uint size, string filePath);
/// <summary>
/// 写
/// </summary>
/// <param name="filePath">ini文件的绝对路径。示例:H:\学习\C#\示例\Demo.ini</param>
/// <param name="section"></param>
/// <param name="key"></param>
/// <param name="val"></param>
/// <returns>true表示写入成功,false表示写入失败</returns>
public static bool WriteValue(string filePath, string section, string key, string val)
{
var value = WritePrivateProfileString(section, key, val, filePath);
if (value != 0)
return true;
else
return false;
}
/// <summary>
/// 删键
/// </summary>
/// <param name="filePath">ini文件的绝对路径。示例:H:\学习\C#\示例\Demo.ini</param>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns>true表示写入成功,false表示写入失败</returns>
public static bool DeleteKey(string filePath, string section, string key)
{
var value = WritePrivateProfileString(section, key, null, filePath);
if (value != 0)
return true;
else
return false;
}
/// <summary>
/// 删段
/// </summary>
/// <param name="filePath">ini文件的绝对路径。示例:H:\学习\C#\示例\Demo.ini</param>
/// <param name="section"></param>
/// <returns>true表示写入成功,false表示写入失败</returns>
public static bool DeleteSection(string filePath, string section)
{
var value = WritePrivateProfileString(section, null, null, filePath);
if (value != 0)
return true;
else
return false;
}
/// <summary>
/// 读值
/// </summary>
/// <param name="filePath">ini文件的绝对路径。示例:H:\学习\C#\示例\Demo.ini</param>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string ReadValue(string filePath, string section, string key)
{
StringBuilder str = new StringBuilder(256);
var charLength = GetPrivateProfileString(section, key, "", str, 256, filePath);
return str.ToString();
}
/// <summary>
/// 读段
/// </summary>
/// <param name="filePath">ini文件的绝对路径。示例:H:\学习\C#\示例\Demo.ini</param>
/// <returns></returns>
public static List<string> ReadSections(string filePath)
{
List<string> sections = new List<string>();
byte[] buf = new byte[65535];
var charLength = GetPrivateProfileStringA(null, null, "", buf, 65535, filePath);
int j = 0;
for (int i = 0; i < charLength; i++)
{
if (buf[i] == 0)
{
sections.Add(Encoding.Default.GetString(buf, j, i - j));
j = i + 1;
}
}
return sections;
}
/// <summary>
/// 读键
/// </summary>
/// <param name="filePath">ini文件的绝对路径。示例:H:\学习\C#\示例\Demo.ini</param>
/// <param name="section"></param>
/// <returns></returns>
public static List<string> ReadKeys(string filePath, string section)
{
List<string> keys = new List<string>();
byte[] buf = new byte[65535];
var charLength = GetPrivateProfileStringA(section, null, "", buf, 65535, filePath);
int j = 0;
for (int i = 0; i < charLength; i++)
{
if (buf[i] == 0)
{
keys.Add(Encoding.Default.GetString(buf, j, i - j));
j = i + 1;
}
}
return keys;
}
}
}