本文主要介绍.NET(C#)中,实现读写ini配置文件两种方法(系统函数和自定义类),以及相关的示例代码。

1、使用WindowsAPI函数实现

using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
namespace MyINI { class IniFile { string Path; string EXE = Assembly.GetExecutingAssembly().GetName().Name; [DllImport("kernel32", CharSet = CharSet.Unicode)] static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath); [DllImport("kernel32", CharSet = CharSet.Unicode)] static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath); public IniFile(string IniPath = null) { Path = new FileInfo(IniPath ?? EXE + ".ini").FullName; } public string Read(string Key, string Section = null) { var RetVal = new StringBuilder(255); GetPrivateProfileString(Section ?? EXE, Key, "", RetVal, 255, Path); return RetVal.ToString(); } public void Write(string Key, string Value, string Section = null) { WritePrivateProfileString(Section ?? EXE, Key, Value, Path); } public void DeleteKey(string Key, string Section = null) { Write(Key, null, Section ?? EXE); } public void DeleteSection(string Section = null) { Write(null, null, Section ?? EXE); } public bool KeyExists(string Key, string Section = null) { return Read(Key, Section).Length > 0; } } }

调用方法:

1)通过以下三种方式之一打开 INI 文件

//在与可执行文件相同的目录中创建或加载INI文件
//命名为EXE.ini(其中EXE是可执行文件的名称)
var MyIni = new IniFile();
//或在当前目录中指定一个配置文件的名称
var MyIni = new IniFile("Settings.ini"); // 或者在指定的目录中指定一个配置文件的名称 var MyIni = new IniFile(@"C:\Settings.ini");

2)写入配置

MyIni.Write("SiteName", "cjavapy");
MyIni.Write("Url", "https://www.cjavapy.com"); 

写入的内容如下: 

[MyINI]
SiteName=cjavapy
Url=https://www.cjavapy.com

3)从 INI 文件中读取值

var siteName = MyIni.Read("SiteName");
var url = MyIni.Read("Url");

4)写入配置时指下配置项:

MyIni.Write("SiteName", "cjavapy", "MyWeb");
MyIni.Write("Url", "https://www.cjavapy.com", "MyWeb");

写入的内容如下:

[MyINI]
SiteName=cjavapy
Url=https://www.cjavapy.com
[MyWeb]
SiteName=cjavapy
Url=https://www.cjavapy.com

5)判断配置是否存在

if(!MyIni.KeyExists("Remark", "Audio"))
{
    MyIni.Write("Remark", "Note", "Audio"); } 

6)删除配置Key

MyIni.DeleteKey("Remark", "Audio");

7)删除配置项

MyIni.DeleteSection("MyWeb");

2、使用自定义类实现

using System;
using System.IO;
using System.Collections;
public class IniParser { private Hashtable keyPairs = new Hashtable(); private String iniFilePath; private struct SectionPair { public String Section; public String Key; } /// <summary> /// 在给定的路径上打开INI文件并枚举IniParser中的值。 /// </summary> /// <param name="iniPath">Full path to INI file.</param> public IniParser(String iniPath) { TextReader iniFile = null; String strLine = null; String currentRoot = null; String[] keyPair = null; iniFilePath = iniPath; if (File.Exists(iniPath)) { try { iniFile = new StreamReader(iniPath); strLine = iniFile.ReadLine(); while (strLine != null) { strLine = strLine.Trim().ToUpper(); if (strLine != "") { if (strLine.StartsWith("[") && strLine.EndsWith("]")) { currentRoot = strLine.Substring(1, strLine.Length - 2); } else { keyPair = strLine.Split(new char[] { '=' }, 2); SectionPair sectionPair; String value = null; if (currentRoot == null) currentRoot = "ROOT"; sectionPair.Section = currentRoot; sectionPair.Key = keyPair[0]; if (keyPair.Length > 1) value = keyPair[1]; keyPairs.Add(sectionPair, value); } } strLine = iniFile.ReadLine(); } } catch (Exception ex) { throw ex; } finally { if (iniFile != null) iniFile.Close(); } } else throw new FileNotFoundException("Unable to locate " + iniPath); } /// <summary> /// 返回给定section的值,key对。 /// </summary> /// <param name="sectionName">Section name</param> /// <param name="settingName">Key name</param> public String GetSetting(String sectionName, String settingName) { SectionPair sectionPair; sectionPair.Section = sectionName.ToUpper(); sectionPair.Key = settingName.ToUpper(); return (String)keyPairs[sectionPair]; } /// <summary> /// 列出给定的Section的所有行 /// </summary> /// <param name="sectionName">Section to enum.</param> public String[] EnumSection(String sectionName) { ArrayList tmpArray = new ArrayList(); foreach (SectionPair pair in keyPairs.Keys) { if (pair.Section == sectionName.ToUpper()) tmpArray.Add(pair.Key); } return (String[])tmpArray.ToArray(typeof(String)); } /// <summary> /// 向要保存的表添加或替换设置。 /// </summary> /// <param name="sectionName">Section to add under.</param> /// <param name="settingName">Key name to add.</param> /// <param name="settingValue">Value of key.</param> public void AddSetting(String sectionName, String settingName, String settingValue) { SectionPair sectionPair; sectionPair.Section = sectionName.ToUpper(); sectionPair.Key = settingName.ToUpper(); if (keyPairs.ContainsKey(sectionPair)) keyPairs.Remove(sectionPair); keyPairs.Add(sectionPair, settingValue); } /// <summary> /// 用空值添加或替换要保存的表的设置。 /// </summary> /// <param name="sectionName">Section</param> /// <param name="settingName">Key</param> public void AddSetting(String sectionName, String settingName) { AddSetting(sectionName, settingName, null); } /// <summary> /// 删除设置 /// </summary> /// <param name="sectionName">指定Section</param> /// <param name="settingName">添加的Key</param> public void DeleteSetting(String sectionName, String settingName) { SectionPair sectionPair; sectionPair.Section = sectionName.ToUpper(); sectionPair.Key = settingName.ToUpper(); if (keyPairs.ContainsKey(sectionPair)) keyPairs.Remove(sectionPair); } /// <summary> /// 保存设置到新文件。 /// </summary> /// <param name="newFilePath">新的文件路径。</param> public void SaveSettings(String newFilePath) { ArrayList sections = new ArrayList(); String tmpValue = ""; String strToSave = ""; foreach (SectionPair sectionPair in keyPairs.Keys) { if (!sections.Contains(sectionPair.Section)) sections.Add(sectionPair.Section); } foreach (String section in sections) { strToSave += ("[" + section + "]\r\n"); foreach (SectionPair sectionPair in keyPairs.Keys) { if (sectionPair.Section == section) { tmpValue = (String)keyPairs[sectionPair]; if (tmpValue != null) tmpValue = "=" + tmpValue; strToSave += (sectionPair.Key + tmpValue + "\r\n"); } } strToSave += "\r\n"; } try { TextWriter tw = new StreamWriter(newFilePath); tw.Write(strToSave); tw.Close(); } catch (Exception ex) { throw ex; } } /// <summary> /// 将设置保存回ini文件。 /// </summary> public void SaveSettings() { SaveSettings(iniFilePath); } }

调用方法:

niParser parser = new IniParser(@"C:\Settings.ini");
String newMessage;
newMessage = parser.GetSetting("MyWeb", "SiteName");
newMessage += parser.GetSetting("MyWeb", "Url");
newMessage += parser.GetSetting("MyINI", "Remark");

原文地址:http://www.cnblogs.com/fireicesion/p/16809687.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性