日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C#关于读写INI文件

發布時間:2023/12/18 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#关于读写INI文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#關于讀寫INI文件

什么是ini文件就是一個配置文件,一般把數據庫等配置信息放進去,然而,改變數據庫的密碼,數據庫名稱,ip等,不要改源碼重新編譯,只需要用記事本打開set.ini 文件,修改保存即可,不需要修改exe文件,你也修改不了,
跟java的數據庫配置信息的properties文件類似或者springboot的yaml文件類似,軟編碼的抽取,我的數據庫配置隨時可能動,war包jar包不要動,的好處。

格式是
[Section] 段落
key(鍵)=value(值) 跟java的HashMap類似 鍵值對的形式存在

常用代碼的積累

項目工程文件添加兩個類,設成公有的 方便外部調用 IniFiles.cs 類和 INIHelper.cs 兩大類

實現效果如下圖

我的主打思想是代碼寫的再多,你不去調用,放在那里也沒事,調用的時候報錯,咱們再去慢慢找錯誤,你寫10個類放在那里,只調用那2個,其他8個類也沒影響,即使空實現也沒事
代碼積累

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文件中指定的節點取得字符串/// </summary>/// <param name="lpAppName">欲在其中查找關鍵字的節點名稱</param>/// <param name="lpKeyName">欲獲取的項名</param>/// <param name="lpDefault">指定的項沒有找到時返回的默認值</param>/// <param name="lpReturnedString">指定一個字串緩沖區,長度至少為nSize</param>/// <param name="nSize">指定裝載到lpReturnedString緩沖區的最大字符數量</param>/// <param name="lpFileName">INI文件完整路徑</param>/// <returns>復制到lpReturnedString緩沖區的字節數量,其中不包括那些NULL中止字符</returns>[DllImport("kernel32")]private static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, int nSize, string lpFileName);/// <summary>/// 修改INI文件中內容/// </summary>/// <param name="lpApplicationName">欲在其中寫入的節點名稱</param>/// <param name="lpKeyName">欲設置的項名</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">節點名</param>/// <param name="key">鍵</param>/// <param name="def">未取到值時返回的默認值</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">欲在其中寫入的節點名稱</param>/// <param name="key">欲設置的項名</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>/// 刪除節/// </summary>/// <param name="section">節點名</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">節點名</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");//在當前程序路徑創建File.Create(filePath);//創建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函數[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> /// 構造方法 /// </summary> /// <param name="INIPath">文件路徑</param> public IniFiles(string INIPath){inipath = INIPath;}public IniFiles() { }/// <summary> /// 寫入INI文件 /// </summary> /// <param name="Section">項目名稱(如 [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">項目名稱(如 [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> /// 驗證文件是否存在 /// </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";//寫入節點1INIHelper.Write("s1", "1", "a", filePath);INIHelper.Write("s1", "2", "b", filePath);INIHelper.Write("s1", "3", "c", filePath);//寫入節點2INIHelper.Write("s2", "4", "d", filePath);INIHelper.Write("s2", "5", "e", filePath);//改節點值(就是重寫一遍)INIHelper.Write("s1", "3", "c3", filePath);//讀取節點1中的key為1的值string value = INIHelper.Read("s1", "1", "789", filePath);//刪除節點 / 鍵INIHelper.DeleteKey("s1", "2", filePath);//刪除節點s1中key為2的值INIHelper.DeleteSection("s1", filePath);//刪除節點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;}} }

總結

以上是生活随笔為你收集整理的C#关于读写INI文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。