.NET程序配置文件操作(ini,cfg,config)

种地  金牌会员 | 2022-8-20 07:34:02 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

在程序开发过程中,我们一般会用到配置文件来设定一些参数。常见的配置文件格式为 ini, xml, config等。
INI

.ini文件,通常为初始化文件,是用来存储程序配置信息的文本文件。
  1. [Login]
  2. #开启加密 0:不开启、1:开启
  3. open_ssl_certificate=0
复制代码
.NET 框架本身不支持 INI 文件,可以利用 Windows API方法使用平台调用服务来写入和读取文件。
  1. // 要写入的部分名称 - sectionName
  2. // 要设置的键名 - key
  3. // 要设置的值 - value
  4. // INI文件位置 - filepath
  5. // 读取是否成功 - result
  6. [DllImport("kernel32")]
  7. bool WritePrivateProfileString(string sectionName,string key,string value,string filepath);
  8. // 要读取的部分名称 - sectionName
  9. // 要读取的键名 - key
  10. // 如果键不存在返回的默认值 - default
  11. // 接收用作缓冲区的字符串 - ReturnedVal
  12. // 实际读取的值 - maxsize
  13. // INI文件位置 - filepath
  14. [DllImport("kernel32")]
  15. int GetPrivateProfileString(string sectionName,string key,string default,StringBuilder ReturnedVal,int maxsize,string filepath);
复制代码
一般会封装一个类来调用该API方法。
  1. public class ReadWriteINIFile{
  2.     ...
  3.     public void WriteINI(string name, string key, string value)
  4.     {
  5.         WritePrivateProfileString(name, key, value, _path);
  6.     }
  7.     public string ReadINI(string name, string key)
  8.     {
  9.         StringBuilder sb = new StringBuilder(255);
  10.         int ini = GetPrivateProfileString(name, key, "", sb, 255, _path);
  11.         return sb.ToString();
  12.     }
  13. }
复制代码
CFG

SharpConfig 是 .NET 的CFG/INI 配置文件操作组件,以文本或二进制格式读取,修改和保存配置文件和流。
  1. Configuration config = Configuration.LoadFromFile("login.cfg");
  2. Section section = config["Login"];
  3. // 读取参数
  4. bool isOpen = section["open_ssl_certificate"].GetValue<bool>();
  5. // 修改参数
  6. section["open_ssl_certificate"].Value = false;
复制代码
Config

在 App.config/web.config 文件中的 configSections 节点下配置 section 节点,.NET 提供自带的类型进行封装。
configSections节点必须为configuration下第一个节点
NameValue键值对
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>       
  3.     <configSections>               
  4.                        
  5.             <section name="NameValueConfigNode" type="System.Configuration.NameValueSectionHandler"/>       
  6.     </configSections>       
  7.            
  8.     <NameValueConfigNode>               
  9.         <add key="Name一" value="Value一" />               
  10.         <add key="Name二" value="Value二" />               
  11.     </NameValueConfigNode>   
  12.     <startup>         
  13.         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />   
  14.     </startup>
  15. </configuration>
复制代码
定义一个静态属性的方法获取 Dictionary 格式的数据:
  1. /// <summary>
  2. /// NameValueCollection
  3. /// </summary>
  4. public static Dictionary<string, string> NameValueConfigNode
  5. {
  6.     get
  7.     {
  8.         NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("NameValueConfigNode");
  9.         Dictionary<string, string> result = new Dictionary<string,string>();
  10.          foreach (string key in nvc.AllKeys)
  11.         {
  12.             result.Add(key, nvc[key]);
  13.         }
  14.         return result;
  15.     }
  16. }
复制代码
Dictionary
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.         <configSections>
  4.                
  5.                 <section name="DictionaryConfigNode" type="System.Configuration.DictionarySectionHandler"/>
  6.         </configSections>
  7.        
  8.         <DictionaryConfigNode>
  9.                 <add key="Key一" value="DictValue一" />
  10.                 <add key="Key二" value="DictValue二" />
  11.         </DictionaryConfigNode>
  12.     <startup>
  13.         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  14.     </startup>
  15. </configuration>
复制代码
  1. /// <summary>
  2. /// Dictionary
  3. /// </summary>
  4. public static Dictionary<string, string> DictionaryConfigNode
  5. {
  6.     get
  7.     {
  8.         IDictionary dict = (IDictionary)ConfigurationManager.GetSection("DictionaryConfigNode");
  9.         Dictionary<string, string> result = new Dictionary<string, string>();
  10.         foreach (string key in dict.Keys)
  11.         {
  12.             result.Add(key, dict[key].ToString());
  13.         }
  14.         return result;
  15.     }
  16. }
复制代码
SingTag
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.         <configSections>
  4.                
  5.                 <section name="SingleTagConfigNode" type="System.Configuration.SingleTagSectionHandler" />
  6.         </configSections>
  7.        
  8.        
  9.         <SingleTagConfigNode PropertyOne="1" PropertyTwo="2" PropertyThree="3" PropertyFour="4" PropertyFive="5" />
  10.     <startup>
  11.         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  12.     </startup>
  13. </configuration>
复制代码
  1. /// <summary>
  2. /// SingleTag
  3. /// </summary>
  4. public static Dictionary<string, string> SingleTagConfigNode
  5. {
  6.     get
  7.     {
  8.         Hashtable dict = (Hashtable)ConfigurationManager.GetSection("SingleTagConfigNode");
  9.         Dictionary<string, string> result = new Dictionary<string, string>();
  10.         foreach (string key in dict.Keys)
  11.         {
  12.             result.Add(key, dict[key].ToString());
  13.         }
  14.         return result;
  15.     }
  16. }
复制代码
自定义配置文件

如果配置文件很多,可以单独定义配置文件,然后在 App.config/Web.config 文件中声明。
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.         <configSections>
  4.                
  5.                 <section name="MyConfigData1" type="ConsoleApplication.ConfigFiles.ConfigFile,ConsoleApplication"/>
  6.         </configSections>
  7.        
  8.         <MyConfigData configSource="ConfigFiles\MyConfigFile.config"/>
  9.     <startup>
  10.         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  11.     </startup>
  12. </configuration>
复制代码
自定义文件 MyConfigFile.config 内容:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <MyConfigData>
  3.         <add key="Key一" value="自定义文件一" />
  4.         <add key="Key二" value="自定义文件二" />
  5.         <add key="Key三" value="自定义文件三" />
  6. </MyConfigData>
复制代码
XML

XML文件常用于简化数据的存储和共享,它的设计宗旨是传输数据,而非显示数据。对于复杂不规则的配置信息也可以用XML文件进行存储。
  1. // 读取文件
  2. XmlDocument xmlDoc = new XmlDocument();
  3. xmlDoc.Load("myfile.xml");
  4. // 根节点
  5. var nodeRoot = xmlDoc.DocumentElement;
  6. // 创建新节点
  7. XmlElement studentNode = xmlDoc.CreateElement("student");
  8. // 创建新节点的孩子节点
  9. XmlElement nameNode = xmlDoc.CreateElement("name");
  10. // 建立父子关系
  11. studentNode.AppendChild(nameNode);
  12. nodeRoot.AppendChild(studentNode);
复制代码
XML基础教程:https://www.w3school.com.cn/xml/index.asp
我的公众号



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表