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#
- 使用C#讀寫ini檔案C#
- C# winform中讀寫ini檔案C#ORM
- C#中讀寫INI配置檔案C#
- winform c#寫ini檔案ORMC#
- java 讀寫 ini 配置檔案Java
- VB讀寫ini檔案 (轉)
- C#讀取ini配置檔案C#
- VB.NET 讀寫ini檔案
- linux/windows 讀寫ini配置檔案LinuxWindows
- 使用IniEditor讀寫INI型別配置檔案型別
- 讀寫INI檔案的四個函式 (轉)函式
- 關於PHP.ini檔案的設定PHP
- C#讀寫檔案總結C#
- 使用C#讀寫xml檔案C#XML
- 建立與讀取.ini檔案
- delphi讀取ini檔案 (轉)
- go 讀取.ini配置檔案Go
- C#讀取文字檔案和寫文字檔案C#
- Python常用配置檔案ini、json、yaml讀寫總結PythonJSONYAML
- C#讀寫xml檔案應用案例C#XML
- API讀取寫入 ini檔案內容的方法函式詳解API函式
- 透過python讀取ini配置檔案Python
- 檔案讀寫
- Linux下用C讀取INI配置檔案Linux
- 基於正則的INI讀寫工具類,支援加密解密加密解密
- 關於檔案讀寫使用RandomAccessFile類的一些簡單操作randomMac
- 檔案排版(文字檔案讀寫)
- java操作ini檔案Java
- Golang 讀、寫檔案Golang
- keras讀寫檔案Keras
- perl 讀寫檔案
- 檔案讀寫IO
- 檔案的讀寫
- Python讀取修改ini配置檔案[ConfigParser]Python
- Boot.ini 檔案的可用開關選項boot
- NPM酷庫047:ini,解析INI配置檔案NPM
- C#讀取Xml檔案C#XML