C#读写ini文件

INI文件就是扩展名为"ini"的文件。

在Windows系统中,INI文件是很多,最重要的就是"System.ini"、"System32.ini"和"Win.ini"。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改INI文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。以及XML文件的国际标准化给INI文件又一次打击。

但在某些场合,INI文件还拥有其不可替代的地位。比如绿色软件的规定就是不向注册表和系统中填入新东西。对于软件需要储存的信息就需要存入到文件中了。XML虽然兼容性比较好,但对于仅仅保存几个自定义参数而言就显得大材小用了。这是就可以选择使用快速简单的储存方式:INI文件。

本文就来探讨一下C#是如何对INI进行读写操作。

 

主要思路是调用Win32 API。

1.引入命名空间

using System.Runtime.InteropServices;

 

2.声明(把一个Win32 API函数转成C#函数)

复制代码
//声明INI文件的写操作函数 WritePrivateProfileString()
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

//声明INI文件的读操作函数 GetPrivateProfileString()
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
复制代码

 

3.函数

复制代码
/* 写入值到ini文件 */
public void WriteValue(string section, string key, string value)
{
    
// section=配置节,key=键名,value=键值,path=路径
    WritePrivateProfileString(section, key, value, sPath);
}

/* 从ini文件读取值 */
public string ReadValue(string section, string key)
{
    
// 每次从ini中读取多少字节
    System.Text.StringBuilder temp = new System.Text.StringBuilder(255);

    
// section=配置节,key=键名,temp=上面,path=路径
    GetPrivateProfileString(section, key, "", temp, 255, sPath);
    
return temp.ToString();
}
复制代码

 

 

到此基本功能已经实现了。下面我们将所有的代码重新整合一下:

复制代码
namespace Library.File
{
    
public class Ini
    {
        
// 声明INI文件的写操作函数 WritePrivateProfileString()
        [System.Runtime.InteropServices.DllImport("kernel32")]
        
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);

        
// 声明INI文件的读操作函数 GetPrivateProfileString()
        [System.Runtime.InteropServices.DllImport("kernel32")]
        
private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);

        
private string sPath = null;

        
/* 构造函数 */
        
public Ini(string path)
        {
            
this.sPath = path;
        }

        
/* 写入值到ini文件 */
        
public void WriteValue(string section, string key, string value)
        {
            
// section=配置节,key=键名,value=键值,path=路径
            WritePrivateProfileString(section, key, value, sPath);
        }

        
/* 从ini文件读取值 */
        
public string ReadValue(string section, string key)
        {
            
// 每次从ini中读取多少字节
            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);

            
// section=配置节,key=键名,temp=上面,path=路径
            GetPrivateProfileString(section, key, "", temp, 255, sPath);
            
return temp.ToString();
        }
    }
}
复制代码

 

开始调用函数。

复制代码
// 写入ini
Ini ini = new Ini("C:/config.ini");
ini.WriteValue(
"Setting""key1""HELLO WORLD!");
ini.WriteValue(
"Setting""key2""HELLO CHINA!");

/*
在C盘下生成自动生成一个config.ini文件,内容如下:

[Setting]
key1=HELLO WORLD!
key2=HELLO CHINA!
*/



// 读取ini
Ini ini = new Ini("C:/config.ini");
string str1 = ini.ReadValue("Setting""key1");
MessageBox.Show(str1);

/*
str1显示为 HELLO WORLD!;
*/
复制代码

上面代码仅提供思路并未测试,如要直接使用,请下载代码。

源代码 https://files.cnblogs.com/prince1988/Library.File.Ini.rar

posted on   依然微笑。。  阅读(645)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2010年3月 >
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示