废话不多说,直接开源:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace students
{
public abstract class Profile
{
[DllImportAttribute("kernel32.dll")]
static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImportAttribute("kernel32.dll")]
static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImportAttribute("kernel32.dll")]
static extern int GetPrivateProfileSectionNames(byte[] lpszReturnBuffer, int nSize, string lpFileName);
[DllImportAttribute("kernel32.dll")]
static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string lpFileName);
private
const string IDS_NULL = "";
public static string GetValue(string filePath, string section, string key)
{
var refValue = new StringBuilder();
GetPrivateProfileString(section, key, IDS_NULL, refValue, 255, filePath);
return refValue.ToString();
}
public static string[] GetSectionNames(string filePath)
{
var cout = 0;
var buffer = new byte[32767];
if (GetPrivateProfileSectionNames(buffer, buffer.Length, filePath) < 1)
return null;
var str = Encoding.Default.GetString(buffer).Split('\0');
foreach (var value in str)
{
if (value == IDS_NULL)
break;
cout++;
}
var ret = new string[cout];
Array.Copy(str, ret, cout);
return ret;
}
public static string[] GetSectionKeys(string section,string filePath)
{
var cout = 0;
byte[] buffer = new byte[65535];
if (GetPrivateProfileSection(section, buffer, buffer.Length, filePath) < 1)
return null;
string _str = Encoding.Default.GetString(buffer);
string[] tmp = _str.Split('\0');
for (int i = 0; i < tmp.Length; i++)
{
if (tmp[i] == IDS_NULL)
break;
cout++;
tmp[i] = tmp[i].Split('=')[0];
}
var ret = new string[cout];
Array.Copy(tmp, ret, cout);
return ret;
}
public static bool SetValue(string filePath, string section, string key, string value)
{
var ret = WritePrivateProfileString(section, key, value, filePath);
return ret != 0;
}
}
}