C#关于读写INI文件
C#關(guān)于讀寫INI文件
什么是ini文件就是一個(gè)配置文件,一般把數(shù)據(jù)庫(kù)等配置信息放進(jìn)去,然而,改變數(shù)據(jù)庫(kù)的密碼,數(shù)據(jù)庫(kù)名稱,ip等,不要改源碼重新編譯,只需要用記事本打開set.ini 文件,修改保存即可,不需要修改exe文件,你也修改不了,
跟java的數(shù)據(jù)庫(kù)配置信息的properties文件類似或者springboot的yaml文件類似,軟編碼的抽取,我的數(shù)據(jù)庫(kù)配置隨時(shí)可能動(dòng),war包jar包不要?jiǎng)?#xff0c;的好處。
格式是
[Section] 段落
key(鍵)=value(值) 跟java的HashMap類似 鍵值對(duì)的形式存在
常用代碼的積累
項(xiàng)目工程文件添加兩個(gè)類,設(shè)成公有的 方便外部調(diào)用 IniFiles.cs 類和 INIHelper.cs 兩大類
實(shí)現(xiàn)效果如下圖
我的主打思想是代碼寫的再多,你不去調(diào)用,放在那里也沒事,調(diào)用的時(shí)候報(bào)錯(cuò),咱們?cè)偃ヂ义e(cuò)誤,你寫10個(gè)類放在那里,只調(diào)用那2個(gè),其他8個(gè)類也沒影響,即使空實(shí)現(xiàn)也沒事
代碼積累
INIHelper.cs 類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Runtime.InteropServices;namespace iniFileFrm {public class INIHelper{/// <summary>/// 為INI文件中指定的節(jié)點(diǎn)取得字符串/// </summary>/// <param name="lpAppName">欲在其中查找關(guān)鍵字的節(jié)點(diǎn)名稱</param>/// <param name="lpKeyName">欲獲取的項(xiàng)名</param>/// <param name="lpDefault">指定的項(xiàng)沒有找到時(shí)返回的默認(rèn)值</param>/// <param name="lpReturnedString">指定一個(gè)字串緩沖區(qū),長(zhǎng)度至少為nSize</param>/// <param name="nSize">指定裝載到lpReturnedString緩沖區(qū)的最大字符數(shù)量</param>/// <param name="lpFileName">INI文件完整路徑</param>/// <returns>復(fù)制到lpReturnedString緩沖區(qū)的字節(jié)數(shù)量,其中不包括那些NULL中止字符</returns>[DllImport("kernel32")]private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);/// <summary>/// 修改INI文件中內(nèi)容/// </summary>/// <param name="lpApplicationName">欲在其中寫入的節(jié)點(diǎn)名稱</param>/// <param name="lpKeyName">欲設(shè)置的項(xiàng)名</param>/// <param name="lpString">要寫入的新字符串</param>/// <param name="lpFileName">INI文件完整路徑</param>/// <returns>非零表示成功,零表示失敗</returns>[DllImport("kernel32")]private static extern int WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);/// <summary>/// 讀取INI文件值/// </summary>/// <param name="section">節(jié)點(diǎn)名</param>/// <param name="key">鍵</param>/// <param name="def">未取到值時(shí)返回的默認(rèn)值</param>/// <param name="filePath">INI文件完整路徑</param>/// <returns>讀取的值</returns>public static string Read(string section, string key, string def, string filePath){StringBuilder sb = new StringBuilder(1024);GetPrivateProfileString(section, key, def, sb, 1024, filePath);return sb.ToString();}/// <summary>/// 寫INI文件值/// </summary>/// <param name="section">欲在其中寫入的節(jié)點(diǎn)名稱</param>/// <param name="key">欲設(shè)置的項(xiàng)名</param>/// <param name="value">要寫入的新字符串</param>/// <param name="filePath">INI文件完整路徑</param>/// <returns>非零表示成功,零表示失敗</returns>public static int Write(string section, string key, string value, string filePath){CheckPath(filePath);return WritePrivateProfileString(section, key, value, filePath);}/// <summary>/// 刪除節(jié)/// </summary>/// <param name="section">節(jié)點(diǎn)名</param>/// <param name="filePath">INI文件完整路徑</param>/// <returns>非零表示成功,零表示失敗</returns>public static int DeleteSection(string section, string filePath){return Write(section, null, null, filePath);}/// <summary>/// 刪除鍵的值/// </summary>/// <param name="section">節(jié)點(diǎn)名</param>/// <param name="key">鍵名</param>/// <param name="filePath">INI文件完整路徑</param>/// <returns>非零表示成功,零表示失敗</returns>public static int DeleteKey(string section, string key, string filePath){return Write(section, key, null, filePath);}private static void CheckPath(string path){string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sys.ini");//在當(dāng)前程序路徑創(chuàng)建File.Create(filePath);//創(chuàng)建INI文件}} }第二大類
IniFiles.cs 類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Runtime.InteropServices;namespace iniFileFrm {public class IniFiles{public string inipath;//聲明API函數(shù)[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);/// <summary> /// 構(gòu)造方法 /// </summary> /// <param name="INIPath">文件路徑</param> public IniFiles(string INIPath){inipath = INIPath;}public IniFiles() { }/// <summary> /// 寫入INI文件 /// </summary> /// <param name="Section">項(xiàng)目名稱(如 [TypeName] )</param> /// <param name="Key">鍵</param> /// <param name="Value">值</param> public void IniWriteValue(string Section, string Key, string Value){WritePrivateProfileString(Section, Key, Value, this.inipath);}/// <summary> /// 讀出INI文件 /// </summary> /// <param name="Section">項(xiàng)目名稱(如 [TypeName] )</param> /// <param name="Key">鍵</param> public string IniReadValue(string Section, string Key){StringBuilder temp = new StringBuilder(500);int i = GetPrivateProfileString(Section, Key, "", temp, 500, this.inipath);return temp.ToString();}/// <summary> /// 驗(yàn)證文件是否存在 /// </summary> /// <returns>布爾值</returns> public bool ExistINIFile(){return File.Exists(inipath);}} }Form1.cs 主要的代碼如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace iniFileFrm {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string filePath = @"C:/set.ini";//寫入節(jié)點(diǎn)1INIHelper.Write("s1", "1", "a", filePath);INIHelper.Write("s1", "2", "b", filePath);INIHelper.Write("s1", "3", "c", filePath);//寫入節(jié)點(diǎn)2INIHelper.Write("s2", "4", "d", filePath);INIHelper.Write("s2", "5", "e", filePath);//改節(jié)點(diǎn)值(就是重寫一遍)INIHelper.Write("s1", "3", "c3", filePath);//讀取節(jié)點(diǎn)1中的key為1的值string value = INIHelper.Read("s1", "1", "789", filePath);//刪除節(jié)點(diǎn) / 鍵INIHelper.DeleteKey("s1", "2", filePath);//刪除節(jié)點(diǎn)s1中key為2的值INIHelper.DeleteSection("s1", filePath);//刪除節(jié)點(diǎn)s2}private void Form1_Load(object sender, EventArgs e){IniFiles f= new IniFiles("./set.ini");string demo = f.IniReadValue("SectionDemoTest", "UserName");this.textBox1.Text = demo;}} }總結(jié)
以上是生活随笔為你收集整理的C#关于读写INI文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文搞定C#关于NPOI类库的使用读写E
- 下一篇: 使用 OpenCL.Net 进行 C#