程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> c#軟件配置文件讀寫方式總結

c#軟件配置文件讀寫方式總結

編輯:關於C#
 

一般在軟件與用戶的交互過程中,很產生多個參數;這些參數需要在用戶關閉軟件後保存下來。傳統的Windows程序使用ini文件來記錄這些參數。
Ini文件的格式

[section1]
Key1=value
Key2=value

[sectionX]
Key3=value
Key4=value

在c#中,我們可以調用這些API來完成自定義用戶配置文件的讀寫;也可以通過分析文本文件的方式來讀寫。

第一種方式:調用Windows API讀寫ini文件
在kernel32.dll中有一下幾個常用的ini文件的操作函數,下面是它們在c#中封送的格式

[System.Security.SuppressUnmanagedCodeSecurity]
private static class NativeMethods{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, uint nSize, string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern uint GetPrivateProfileString(string lpAppName,string lpKeyName, string lpDefault, StringBuilder lpReturnedString,
int nSize, string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern uint GetPrivateProfileString(string lpAppName,
string lpKeyName, string lpDefault, [In, Out] char[] lpReturnedString,int nSize,
string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, IntPtr lpReturnedString, uint nSize,string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetPrivateProfileInt(string lpAppName,string lpKeyName, int lpDefault, string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetPrivateProfileSection(string lpAppName, IntPtr lpReturnedString, uint nSize, string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName); }
具體的使用方法筆者也不在這裡一一贅述了,感興趣的朋友可以自行翻閱下API手冊。

第二種方式:文本分析讀寫ini文件
這種方法很常用,讀取ini文件後逐行分析,筆者在這裡給出加載ini文件的代碼。默認將分析結果保存在一個Dictionary>的泛型裡。Item是自定義的一個結構變量。

public struct Item
{
public string Field { get; set; } //鍵
public object Value { get; set; } //值
}
public void Load(string iniFile)
{
// 讀取文件,剔除空行和注釋行
var rawFileData = System.IO.File.ReadAllLines(iniFile).Where(line=> !line.Equals(string.Empty) && !line.StartsWith(";"));
// 定義一個[section]結
var currentSection = string.Empty;
// 讀取每行
foreach (var line in rawFileData)
{
// 查找section
if (line.StartsWith("[")) {
currentSection = line.TrimStart('[').TrimEnd(']');
if (!SectionExists(currentSection)) Add(currentSection);
}
else{
// 查找key=value鍵值對
var lineData = line.Split('=');
for (var i = 0; i < lineData.Count(); i++)
lineData[i] = lineData[i].Trim();
// Try some conversions to store the item as their natural format.
bool boolTest;
decimal numTest;
// 分析值的類型為布爾量還是數字量
if(Boolean.TryParse(lineData[1], out boolTest)){
this[currentSection].Add(new Item { Field = lineData[0], Value = boolTest });
//繼續
continue;

}
// 分析數字量
if (Decimal.TryParse(lineData[1], out numTest)){
this[currentSection].Add(new Item { Field = lineData[0], Value = numTest });
// 繼續
continue;
}
// 默認為值類型為字符串
this[currentSection].Add(new Item { Field = lineData[0], Value = lineData[1] });
}
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved