最近用到保存文件的相关东西,主要是封装两个函数,代码如下:可以直接使用
using System; using System.Collections.Specialized; using System.IO; using System.Runtime.InteropServices; using System.Text; namespace IniFileTest { public class INI { const int COUNT = 0xFFFF; [DllImport("kernel32")] private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, byte[] buffer, int size, string filePath); /// <summary> /// ini关联的文件 /// </summary> private string FileName; public INI(string filename) { FileInfo file = new FileInfo(filename); if (file.Exists) { FileName = new FileInfo(filename).FullName; } } /// <summary> /// 删除Section /// </summary> /// <param name="SectionName"></param> /// <returns></returns> public bool EraseSection(string SectionName) { return WritePrivateProfileString(SectionName, null, null, FileName); } /// <summary> /// 写入section 键值对,如果没有section 则创建并写入 /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool Write(string section, string key, string value) { return WritePrivateProfileString(section, key, value, FileName); } /// <summary> /// 删除键 /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <returns></returns> public bool EraseKey(string section, string key) { return WritePrivateProfileString(section, key, null, FileName); } /// <summary> /// 获取所有section /// </summary> /// <returns></returns> public StringCollection GetSections() { StringCollection sections = new StringCollection(); byte[] buffer = new byte[COUNT]; int length = GetPrivateProfileString(null, null, null, buffer, COUNT, FileName); int start = 0; for (int i = 0; i < length; i++) { if (buffer[i] == 0 && i > start) { string str = Encoding.Default.GetString(buffer, start, i - start); sections.Add(str); start = i + 1; ; } } return sections; } /// <summary> /// 获取section下的所哟keys /// </summary> /// <param name="section"></param> /// <returns></returns> public StringCollection GetSectionKeys(string section) { StringCollection keys = new StringCollection(); byte[] buffer = new byte[COUNT]; int length = GetPrivateProfileString(section, null, null, buffer, COUNT, FileName); int start = 0; for (int i = 0; i < length; i++) { if (buffer[i] == 0 && i > start) { string str = Encoding.Default.GetString(buffer, start, i - start); keys.Add(str); start = i + 1; ; } } return keys; } /// <summary> /// 查寻指定的key的值,没有则返回defaultvalue /// </summary> /// <param name="section"></param> /// <param name="key"></param> /// <param name="defaultvalue"></param> /// <returns></returns> public String GetValue(String section, string key, string defaultvalue) { byte[] bytes = new byte[COUNT]; int s = GetPrivateProfileString(section, key, defaultvalue, bytes, COUNT, FileName); string str = Encoding.GetEncoding(0).GetString(bytes, 0, s); return defaultvalue; } } }
原文地址:http://www.cnblogs.com/shenfuqiang/p/3832689.html