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)文章
C#使用SemaphoreSlim實(shí)現(xiàn)并發(fā)控制與限流策略的實(shí)戰(zhàn)指南
在現(xiàn)代應(yīng)用中(如爬蟲(chóng)、并發(fā)請(qǐng)求、數(shù)據(jù)庫(kù)連接池、異步任務(wù)處理),我們常常需要限制同時(shí)執(zhí)行的任務(wù)數(shù)量,以避免過(guò)載或資源競(jìng)爭(zhēng),在 C# 中,最簡(jiǎn)潔高效的解決方案之一就是SemaphoreSlim,本文就給大家介紹了C#使用SemaphoreSlim實(shí)現(xiàn)并發(fā)控制與限流策略的實(shí)戰(zhàn)指南2025-11-11
C#實(shí)現(xiàn)簡(jiǎn)單獲取掃碼槍信息代碼
本文給大家分享的是使用C#實(shí)現(xiàn)簡(jiǎn)單獲取掃碼槍信息代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2016-07-07
C#實(shí)現(xiàn)語(yǔ)音播報(bào)功能
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)語(yǔ)音播報(bào)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C#通過(guò)ADO.NET訪問(wèn)數(shù)據(jù)的方法詳解
在 C# 的應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)訪問(wèn)是極為關(guān)鍵的部分,ADO.NET作為.NET 框架下用于數(shù)據(jù)訪問(wèn)的核心技術(shù),能夠幫助開(kāi)發(fā)者便捷地與各類數(shù)據(jù)源進(jìn)行交互,本文將深入剖析ADO.NET,帶你掌握使用 C# 通過(guò)ADO.NET訪問(wèn)數(shù)據(jù)的方法,需要的朋友可以參考下2025-02-02
深入理解C#中的享元模式(Flyweight Pattern)
享元模式通過(guò)共享對(duì)象減少內(nèi)存占用,區(qū)分內(nèi)蘊(yùn)與外部狀態(tài),適用于大量重復(fù)對(duì)象場(chǎng)景,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2025-05-05
C#通過(guò)IComparable實(shí)現(xiàn)ListT.sort()排序
這篇文章主要介紹了C#通過(guò)IComparable實(shí)現(xiàn)ListT.sort()排序的方法,可實(shí)現(xiàn)自定義的排序方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-09-09
C#使用Directoryinfo類獲得目錄信息和屬性的方法
這篇文章主要介紹了C#使用Directoryinfo類獲得目錄信息和屬性的方法,涉及C#操作目錄的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C# 中的GroupBy的動(dòng)態(tài)拼接問(wèn)題及GroupBy<>用法介紹
這篇文章主要介紹了C# 中的GroupBy的動(dòng)態(tài)拼接問(wèn)題,在文章給大家提到了C# List泛型集合中的GroupBy<>用法詳解,需要的朋友可以參考下2017-12-12

