C#操作INI文件的方法詳解
本文主要介紹通過(guò)調(diào)用kernel32函數(shù),實(shí)現(xiàn)對(duì)ini文件的讀取和寫(xiě)入。
INI文件介紹
INI文件全稱(chēng)是Initialization File的縮寫(xiě),即初始化文件,是windows系統(tǒng)的系統(tǒng)配置文件所采用的存儲(chǔ)格式,統(tǒng)管windows的各項(xiàng)配置。
INI文件由節(jié)、鍵、值組成。
INI文件一般放一些常量或數(shù)據(jù)庫(kù)鏈接語(yǔ)句等,再在需要的頁(yè)面包含進(jìn)去,和直接命為asp是沒(méi)什么區(qū)別的。
在進(jìn)行C#程序開(kāi)發(fā)時(shí),尤其涉及到數(shù)據(jù)庫(kù)配置或其他信息,可配置INI文件,方便軟件的靈活配置。
kernel32
kernel32.dll是Windows 9x/Me中非常重要的32位動(dòng)態(tài)鏈接庫(kù)文件,屬于內(nèi)核級(jí)文件。它控制著系統(tǒng)的內(nèi)存管理、數(shù)據(jù)的輸入輸出操作和中斷處理,當(dāng)Windows啟動(dòng)時(shí),kernel32.dll就駐留在內(nèi)存中特定的寫(xiě)保護(hù)區(qū)域,使別的程序無(wú)法占用這個(gè)內(nèi)存區(qū)域。 以上來(lái)自百度百科
[DllImport("kernel32")] //讀取INI文件 public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")]//向INI文件中寫(xiě)入數(shù)據(jù) public static extern long WritePrivateProfileString(string mpAppName,string mpKeyName,string mpDefault,string mpFileName);
Demo案例
實(shí)現(xiàn)功能
調(diào)用Kernel32函數(shù)實(shí)現(xiàn)ini文件的讀取和寫(xiě)入。
注意ini的編碼格式為ANSI。在實(shí)際軟件編寫(xiě)時(shí),發(fā)現(xiàn)無(wú)法保存為ANSI,網(wǎng)上了解后發(fā)現(xiàn)是ASCI包含中文字符,所有ini需要有中文字符。如果全是英文的話,則無(wú)法保存為ASCI,即使保存為ASCI,再次打開(kāi)后也會(huì)變成其他編碼格式。
程序代碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace INIOpera { public partial class Form1 : Form { public Form1() { InitializeComponent(); } #region 定義公共變量 public static string strNode = "INFO"; public static string strPath = Application.StartupPath + "\\INFO.ini"; #endregion //引入kernel32函數(shù) [DllImport("kernel32")] //讀取INI文件 public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")]//向INI文件中寫(xiě)入數(shù)據(jù) public static extern long WritePrivateProfileString(string mpAppName, string mpKeyName, string mpDefault, string mpFileName); /// <summary> /// 讀取INI文件 /// </summary> /// <param name="section">欲在其中查找條目的小節(jié)名稱(chēng)。這個(gè)字串不區(qū)分大小寫(xiě)。</param> /// <param name="key">欲獲取的項(xiàng)名或條目名。這個(gè)字串不區(qū)分大小寫(xiě)。</param> /// <param name="def">指定的條目沒(méi)有找到時(shí)返回的默認(rèn)值??稍O(shè)為空("")</param> /// <param name="filePath">完整的INI文件名</param> /// <returns></returns> public static string GetINIFileString(string section,string key, string def, string filePath) { StringBuilder strTemp = new StringBuilder(1024); GetPrivateProfileString(section, key, def, strTemp, 1024, filePath); return strTemp.ToString(); } private void button1_Click(object sender, EventArgs e) { textBox1.Text = GetINIFileString(strNode, "Name","", strPath); } private void button2_Click(object sender, EventArgs e) { textBox2.Text = GetINIFileString(strNode, "Location", "", strPath); } private void button3_Click(object sender, EventArgs e) { textBox3.Text = GetINIFileString(strNode, "IP", "", strPath); } private void button4_Click(object sender, EventArgs e) { textBox4.Text = GetINIFileString(strNode, "ComputerName", "", strPath); } private void button5_Click(object sender, EventArgs e) { textBox5.Text = GetINIFileString(strNode, "WorkAblity", "", strPath); } private void textBox1_TextChanged(object sender, EventArgs e) { } private void textBox2_TextChanged(object sender, EventArgs e) { } private void button6_Click(object sender, EventArgs e) { WritePrivateProfileString(strNode, "Name", textBox10.Text,strPath); } private void button7_Click(object sender, EventArgs e) { WritePrivateProfileString(strNode, "Location", textBox9.Text, strPath); } private void button8_Click(object sender, EventArgs e) { WritePrivateProfileString(strNode, "IP", textBox8.Text, strPath); } private void button9_Click(object sender, EventArgs e) { WritePrivateProfileString(strNode, "ComputerName", textBox7.Text, strPath); } private void button10_Click(object sender, EventArgs e) { WritePrivateProfileString(strNode, "WorkAblity", textBox6.Text, strPath); } } }
擴(kuò)展作用
INI文件主要保存數(shù)據(jù)庫(kù)的參數(shù)信息或其他軟件信息,尤其在進(jìn)行項(xiàng)目移植中,可以修改配置參數(shù),快速完成軟件程序的調(diào)試。
到此這篇關(guān)于C#操作INI文件的方法詳解的文章就介紹到這了,更多相關(guān)C#操作INI文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中List轉(zhuǎn)IList的實(shí)現(xiàn)
本文主要介紹了C#中List轉(zhuǎn)IList的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07C#創(chuàng)建數(shù)據(jù)庫(kù)及導(dǎo)入sql腳本的方法
這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫(kù)及導(dǎo)入sql腳本的方法,涉及C#針對(duì)數(shù)據(jù)庫(kù)的創(chuàng)建、連接、導(dǎo)入等相關(guān)操作技巧,需要的朋友可以參考下2015-12-12C#實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件夾變化
在開(kāi)發(fā)各種應(yīng)用程序時(shí),我們經(jīng)常需要對(duì)文件系統(tǒng)中的文件或文件夾進(jìn)行實(shí)時(shí)監(jiān)測(cè),下面就跟隨小編一起來(lái)看看具體如何使用C#實(shí)現(xiàn)這一功能吧2024-03-03C#三種方法獲取文件的Content-Type(MIME Type)
這篇文章介紹了C#獲取文件Content-Type(MIME Type)的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01C#中調(diào)用Windows API的技術(shù)要點(diǎn)說(shuō)明
本篇文章主要是對(duì)C#中調(diào)用Windows API的技術(shù)要點(diǎn)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01