C# 讀寫ini文件操作實(shí)現(xiàn)
在C#應(yīng)用程序中,常將INI文件作為配置文件,用于存儲(chǔ)應(yīng)用程序的設(shè)置和參數(shù)。
一、INI文件結(jié)構(gòu)
INI文件結(jié)構(gòu)簡(jiǎn)單,由節(jié)(Sections)和鍵值對(duì)(Key-Value Pairs)組成。每個(gè)節(jié)由方括號(hào)包圍,例如[SectionName],而鍵值對(duì)則是以等號(hào)=分隔的字符串,例如Key=Value。每個(gè)節(jié)都包含一個(gè)或多個(gè)鍵值對(duì),用于存儲(chǔ)相關(guān)的配置信息。
INI文件示例:
[AmplifierForm] ResInitialize=0.5,0.7,0.5,0.6,0.6 [OffSignalForm] ResInitialize=0.5,0.7,0.5,0.6,0.6 ResColl=1.3,1.5
該示例中有兩個(gè)節(jié):AmplifierForm、OffSignalForm,每個(gè)節(jié)下都有一些鍵值對(duì),用于存儲(chǔ)配置信息。
二、讀取INI文件中的數(shù)據(jù)
C#命名空間中沒(méi)有直接讀寫INI的類,但在"kernel32.dll"文件中有Win32的API函數(shù)–WritePrivateProfileString()和GetPrivateProfileString(),可操作ini文件。
靜態(tài)操作使用類
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace FileOperationsDemo { public class ReadWriteINI { #region API函數(shù)聲明 /// <summary> /// 寫入ini文件 /// </summary> /// <param name="section">節(jié)點(diǎn)名稱</param> /// <param name="key">鍵</param> /// <param name="val">值</param> /// <param name="filePath">ini路徑</param> /// <returns>0失敗/其他成功</returns> [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); /// <summary> /// /// </summary> /// <param name="section">節(jié)點(diǎn)名稱,[]內(nèi)的段落名</param> /// <param name="key">鍵</param> /// <param name="def">值(未讀取到數(shù)據(jù)時(shí)設(shè)置的默認(rèn)返回值)</param> /// 對(duì)應(yīng)API函數(shù)的def參數(shù),它的值由用戶指定,是當(dāng)在配置文件中沒(méi)有找到具體的Value時(shí),就用def的值來(lái)代替??梢詾榭? /// <param name="retVal">讀取到的結(jié)果值</param> /// <param name="size">讀取緩沖區(qū)大小</param> /// <param name="filePath">ini配置文件的路徑加ini文件名</param> /// <returns>讀取到的字節(jié)數(shù)量</returns> [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); #endregion /// <summary> /// 寫INI,添加新節(jié)點(diǎn)、鍵值,及編輯修改鍵對(duì)應(yīng)的值 /// </summary> /// <param name="in_filename">ini配置文件的路徑加ini文件名</param> /// <param name="Section">節(jié)點(diǎn)名稱,[]內(nèi)的段落名</param> /// <param name="Key">鍵</param> /// <param name="Value">值</param> public static bool IniFile_SetVal(string in_filename, string Section, string Key, string Value) { if (File.Exists(in_filename)) { // 調(diào)用winapi函數(shù)將Key=Value寫入Section節(jié)點(diǎn)下 long len = WritePrivateProfileString(Section, Key, Value, in_filename); if (len == 0) { return false; } else { return true; } } else { return true; } } /// <summary> /// 讀ini /// </summary> /// <param name="in_filename">ini配置文件的路徑加ini文件名</param> /// <param name="Section">節(jié)點(diǎn)名稱,[]內(nèi)的段落名</param> /// <param name="Key">鍵</param> /// <returns></returns> public static string IniFile_GetVal(string in_filename, string Section, string Key) { if (File.Exists(in_filename)) { // 聲明接收的數(shù)據(jù) StringBuilder builder = new StringBuilder(1024); // 調(diào)用winapi函數(shù)讀取Section節(jié)點(diǎn)下Key的值 int len = GetPrivateProfileString(Section, Key, "", builder, 1024, in_filename); if (len == 0) return "1"; else return (builder.ToString()); } else return string.Empty; } } }
操作示例
/// <summary> /// 讀取ini文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { string pathName = Application.StartupPath + "\\config\\ResOriginal.ini"; string resStarter = ReadWriteINI.IniFile_GetVal(pathName, "SelfCheckFace", "ResInitialize"); string[] resInitLine = resStarter.Split(','); for (int ii = 0; ii < resInitLine.Length; ii++) { richTextBox2.AppendText(resInitLine[ii] + "\n"); } } /// <summary> /// 寫入ini文件,新建或編輯 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { string pathName = Application.StartupPath + "\\config\\ResOriginal.ini"; ReadWriteINI.IniFile_SetVal(pathName, "SelfCheckFace", "ResInitialize", "1,2,3,4,5"); string[] resInitLine = richTextBox2.Lines; string tempWrite = string.Join(",", resInitLine); tempWrite=tempWrite.Remove(tempWrite.Length-1); ReadWriteINI.IniFile_SetVal(pathName, "SelfCheckF", "ResInitialize", tempWrite); }
到此這篇關(guān)于C# 讀寫ini文件操作實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# 讀寫ini內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Flyweight模式應(yīng)用實(shí)踐的相關(guān)介紹
本篇文章,小編將為大家介紹Flyweight模式應(yīng)用實(shí)踐,有需要的朋友可以參考一下2013-04-04C# 對(duì)文件與文件夾的操作包括刪除、移動(dòng)與復(fù)制
在.Net中,對(duì)文件(File)和文件夾(Folder)的操作可以使用File類和Directory類,也可以使用FileInfo類和DirectoryInfo類,本文將詳細(xì)介紹,需要的朋友可以參考2012-11-11C#的FileInfo類實(shí)現(xiàn)文件操作實(shí)例
這篇文章主要介紹了C#的FileInfo類實(shí)現(xiàn)文件操作實(shí)例,比較實(shí)用的功能,需要的朋友可以參考下2014-07-07c#實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)udp異步通信程序示例
這篇文章主要介紹了c#實(shí)現(xiàn)簡(jiǎn)單控制臺(tái)udp異步通信程序示例,需要的朋友可以參考下2014-04-04WPF實(shí)現(xiàn)3D翻牌式倒計(jì)時(shí)特效
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)3D翻牌式倒計(jì)時(shí)特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09