C#对INI文件读写
C#本身没有对INI格式文件的操作类,可以自定义一个IniFile类进行INI文件读写。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; namespace MSFramework.Common { /// <summary> /// ini文件类 /// </summary> public class IniFile { private string m_FileName; public string FileName { get { return m_FileName; } set { m_FileName = value; } } [DllImport("kernel32.dll")] private static extern int GetPrivateProfileInt( string lpAppName, string lpKeyName, int nDefault, string lpFileName ); [DllImport("kernel32.dll")] private static extern int GetPrivateProfileString( string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName ); [DllImport("kernel32.dll")] private static extern int WritePrivateProfileString( string lpAppName, string lpKeyName, string lpString, string lpFileName ); /// <summary> /// 构造函数 /// </summary> /// <param name="aFileName">Ini文件路径</param> public IniFile(string aFileName) { this.m_FileName = aFileName; } /// <summary> /// 构造函数 /// </summary> public IniFile() { } /// <summary> /// [扩展]读Int数值 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="def">默认值</param> /// <returns></returns> public int ReadInt(string section, string name, int def) { return GetPrivateProfileInt(section, name, def, this.m_FileName); } /// <summary> /// [扩展]读取string字符串 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="def">默认值</param> /// <returns></returns> public string ReadString(string section, string name, string def) { StringBuilder vRetSb = new StringBuilder(2048); GetPrivateProfileString(section, name, def, vRetSb, 2048, this.m_FileName); return vRetSb.ToString(); } /// <summary> /// [扩展]写入Int数值,如果不存在 节-键,则会自动创建 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="Ival">写入值</param> public void WriteInt(string section, string name, int Ival) { WritePrivateProfileString(section, name, Ival.ToString(), this.m_FileName); } /// <summary> /// [扩展]写入String字符串,如果不存在 节-键,则会自动创建 /// </summary> /// <param name="section">节</param> /// <param name="name">键</param> /// <param name="strVal">写入值</param> public void WriteString(string section, string name, string strVal) { WritePrivateProfileString(section, name, strVal, this.m_FileName); } /// <summary> /// 删除指定的 节 /// </summary> /// <param name="section"></param> public void DeleteSection(string section) { WritePrivateProfileString(section, null, null, this.m_FileName); } /// <summary> /// 删除全部 节 /// </summary> public void DeleteAllSection() { WritePrivateProfileString(null, null, null, this.m_FileName); } /// <summary> /// 读取指定 节-键 的值 /// </summary> /// <param name="section"></param> /// <param name="name"></param> /// <returns></returns> public string IniReadValue(string section, string name) { StringBuilder strSb = new StringBuilder(256); GetPrivateProfileString(section, name, "", strSb, 256, this.m_FileName); return strSb.ToString(); } /// <summary> /// 写入指定值,如果不存在 节-键,则会自动创建 /// </summary> /// <param name="section"></param> /// <param name="name"></param> /// <param name="value"></param> public void IniWriteValue(string section, string name, string value) { WritePrivateProfileString(section, name, value, this.m_FileName); } } }
应用:
有原始INI文件:
执行代码:
IniFile myIni = new IniFile(Environment.CurrentDirectory + "\\Config.ini"); myIni.WriteInt("Tsection", "tName", 89); Console.WriteLine(myIni.ReadString("System", "MainFormName", "")); Console.WriteLine(myIni.ReadString("DbServer", "DbFile", "")); myIni.WriteString("DbServer", "DbFile", @"E:\Work\test2.db"); Console.WriteLine(myIni.ReadString("DbServer", "DbServer", "")); Console.WriteLine(myIni.ReadString("DbServer", "DbFile", ""));
执行结果:
http://www.cnblogs.com/CUIT-DX037/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话