在C# WinForm應(yīng)用程序中,INI文件常被用作簡單的配置文件,用于存儲應(yīng)用程序的設(shè)置和參數(shù)。INI文件是一種文本文件,其結(jié)構(gòu)通常包括節(jié)(Sections)和鍵值對(Key-Value Pairs)。每個節(jié)都包含一個或多個鍵值對,用于存儲相關(guān)的配置信息。
本文將介紹如何在C# WinForm程序中讀取和寫入INI配置文件,包括創(chuàng)建INI文件、讀取INI文件中的數(shù)據(jù)以及向INI文件中寫入數(shù)據(jù)。
一、INI文件的基本結(jié)構(gòu)
INI文件的基本結(jié)構(gòu)非常簡單,由節(jié)(Sections)和鍵值對(Key-Value Pairs)組成。每個節(jié)由方括號包圍,例如[SectionName]
,而鍵值對則是以等號=
分隔的字符串,例如Key=Value
。下面是一個簡單的INI文件示例:
[AppSettings]
Setting1=Value1
Setting2=Value2
[Database]
Server=localhost
Port=3306
在這個示例中,有兩個節(jié):AppSettings
和Database
。每個節(jié)下都有一些鍵值對,用于存儲配置信息。
二、讀取INI文件中的數(shù)據(jù)
在C#中,可以使用System.Configuration
命名空間下的IniFile
類或者System.IO
命名空間下的文件操作方法來讀取INI文件中的數(shù)據(jù)。這里我們使用System.IO
的方法來實(shí)現(xiàn)。
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
public class IniFileReader
{
private string filePath;
public IniFileReader(string filePath)
{
this.filePath = filePath;
}
public string ReadValue(string section, string key)
{
string value = string.Empty;
if (File.Exists(filePath))
{
var lines = File.ReadAllLines(filePath, Encoding.Default);
foreach (var line in lines)
{
var trimmedLine = line.Trim();
if (trimmedLine.StartsWith("[") && trimmedLine.EndsWith("]"))
{
var currentSection = trimmedLine.Substring(1, trimmedLine.Length - 2);
if (currentSection == section)
{
var keyValue = line.Split('=');
if (keyValue.Length == 2 && keyValue[0].Trim() == key)
{
value = keyValue[1].Trim();
break;
}
}
}
}
}
return value;
}
}
使用上述IniFileReader
類,你可以像下面這樣讀取INI文件中的數(shù)據(jù):
var reader = new IniFileReader("path_to_your_file.ini");
string setting1Value = reader.ReadValue("AppSettings", "Setting1");
Console.WriteLine(setting1Value); // 輸出: Value1
三、向INI文件中寫入數(shù)據(jù)
向INI文件中寫入數(shù)據(jù)同樣可以使用System.IO
命名空間下的文件操作方法來實(shí)現(xiàn)。下面是一個簡單的示例:
using System;
using System.IO;
using System.Text;
public class IniFileWriter
{
private string filePath;
public IniFileWriter(string filePath)
{
this.filePath = filePath;
}
public void WriteValue(string section, string key, string value)
{
var lines = new List<string>();
bool isSectionFound = false;
if (File.Exists(filePath))
{
lines = File.ReadAllLines(filePath, Encoding.Default).ToList();
}
foreach (var line in lines)
{
var trimmedLine = line.Trim();
if (trimmedLine.StartsWith("[") && trimmedLine.EndsWith("]"))
{
var currentSection = trimmedLine.Substring(1, trimmedLine.Length - 2);
if (currentSection == section)
{
isSectionFound = true;
var keyValueLine = $"{key}={value}";
int index = lines.IndexOf(line);
lines.Insert(index + 1, keyValueLine);
break;
}
}
}
if (!isSectionFound)
{
lines.Add($"[{section}]");
lines.Add($"{key}={value}");
}
File.WriteAllLines(filePath, lines, Encoding.Default
該文章在 2024/3/26 18:36:05 編輯過