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";
//寫入節點1
INIHelper.Write("s1", "1", "a", filePath);
INIHelper.Write("s1", "2", "b", filePath);
INIHelper.Write("s1", "3", "c", filePath);
//寫入節點2
INIHelper.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檔案C#
- java 讀寫 ini 配置檔案Java
- 使用IniEditor讀寫INI型別配置檔案型別
- Python常用配置檔案ini、json、yaml讀寫總結PythonJSONYAML
- 使用C#讀寫xml檔案C#XML
- C#讀寫檔案總結C#
- go 讀取.ini配置檔案Go
- C#讀取文字檔案和寫文字檔案C#
- 透過python讀取ini配置檔案Python
- 檔案排版(文字檔案讀寫)
- 【自動化測試】Python 讀取 .ini 格式檔案Python
- 關於檔案讀寫使用RandomAccessFile類的一些簡單操作randomMac
- NPM酷庫047:ini,解析INI配置檔案NPM
- Golang 讀、寫檔案Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- keras讀寫檔案Keras
- 「Python」:檔案讀寫Python
- 檔案的讀寫
- C#讀取Xml檔案C#XML
- 重拾C#日常積累:config配置檔案的讀寫C#
- 關於onethink 目錄,檔案讀寫檢測函式中的問題函式
- python讀寫excel檔案PythonExcel
- C++讀寫檔案C++
- 普通檔案的讀寫
- python檔案讀寫操作Python
- C++檔案讀寫C++
- C#讀取Json配置檔案C#JSON
- MySql5.7配置檔案my.ini 設定 my.ini檔案路徑MySql
- VBA建立文字檔案、讀寫文字檔案
- 基於 java 註解的 csv 檔案讀寫框架Java框架
- pyinstaller 打包後讀取 ini 配置檔案路徑錯誤,怎麼定位配置檔案
- Mysql 配置檔案 my.iniMySql
- php.ini 檔案在哪裡?PHP
- python ini 配置檔案處理Python
- MySQL檔案my.ini配置MySql
- pytest配置檔案pytest.ini
- 讀取檔案流並寫入檔案流