社区
C#
帖子详情
如何遍歷 ini 文件中所有 Section 及 Key ?
rockyvan
2009-07-09 01:37:54
如題:
如何遍歷 ini 文件中所有 Section 及 Key ?
C# 操作 ini 文件有沒有相關的系統函數?
...全文
938
11
打赏
收藏
如何遍歷 ini 文件中所有 Section 及 Key ?
如題: 如何遍歷 ini 文件中所有 Section 及 Key ? C# 操作 ini 文件有沒有相關的系統函數?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wuyq11
2009-07-09
打赏
举报
回复
public class INIClass
{
public string inipath;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
/// <summary>
/// 构造方法
/// </summary>
/// <param name="INIPath">文件路径</param>
public INIClass(string INIPath)
{
inipath = INIPath;
}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="Section">项目名称(如 [TypeName] )</param>
/// <param name="Key">键</param>
/// <param name="Value">值</param>
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.inipath);
}
/// <summary>
/// 读出INI文件
/// </summary>
/// <param name="Section">项目名称</param>
/// <param name="Key">键</param>
public string IniReadValue(string Section,string Key)
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);
return temp.ToString();
}
/// <summary>
/// 验证文件是否存在
/// </summary>
public bool ExistINIFile()
{
return File.Exists(inipath);
}
}
wuyq11
2009-07-09
打赏
举报
回复
[DllImport("kernel32")]
private static extern bool GetPrivateProfileString(
string lpApplicationName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString ,
int nSize,
string lpFileName);
StringBuilder strcaption =new StringBuilder(256);
StringBuilder strcaption1=new StringBuilder(256);
if(GetPrivateProfileString("","","",strcaption,strcaption.Capacity,文件地址))
{
rockyvan
2009-07-09
打赏
举报
回复
多謝各位!我先仔細研究一下。
enihs
2009-07-09
打赏
举报
回复
GetPrivateProfileSectionNames 可以返回所有的session值吧,
然后调用 GetPrivateProfileString去获取相应的key
参考
zgke
2009-07-09
打赏
举报
回复
string[] _IniText = File.ReadAllLines(@"C:\1.ini", Encoding.Default);
IList<string> _SectionList =new List<string>();
IList<string> _KeyList =new List<string>();
for (int i = 0; i != _IniText.Length;i++ )
{
string _Text = _IniText[i].Trim();
if (_Text[0] == '[' && _Text[_Text.Length - 1] == ']')
{
_SectionList.Add(_Text);
}
else
{
_KeyList.Add(_Text.Split('=')[0]);
}
}
hecker728
2009-07-09
打赏
举报
回复
用api,很方便,,网上找的
INI文件其实是一种具有特定结构的文本文件,它的构成分为三部分,结构如下: [Section1]
key 1 = value2
key 1 = value2……文件由若干个段落(section)组成,每个段落又分成若干个键(key)和值(value)。Windows系统自带的Win32的API函数GetPrivateProfileString()和WritePrivateProfileString()分别实现了对INI文件的读写操作,他们位于kernel32.dll下。
但是令人遗憾的是C#所使用的.NET框架下的公共类库并没有提供直接操作INI文件的类,所以唯一比较理想的方法就是调用API函数。
然后,.Net框架下的类库是基于托管代码的,而API函数是基于非托管代码的,(在运行库的控制下执行的代码称作托管代码。相反,在运行库之外运行的代码称作非托管代码。)如何实现托管代码与非托管代码之间的操作呢?.Net框架的System.Runtime.InteropServices命名空间下提供各种各样支持COM interop及平台调用服务的成员,其中最重要的属性之一DllImportAttribute可以用来定义用于访问非托管API的平台调用方法,它提供了对从非托管DLL导出的函数进行调用所必需的信息。下面就来看一下如何实现C#与API函数的互操作。
读操作:
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath);
section:要读取的段落名
key: 要读取的键
defVal: 读取异常的情况下的缺省值
retVal: key所对应的值,如果该key不存在则返回空值
size: 值允许的大小
filePath: INI文件的完整路径和文件名
写操作:
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
section: 要写入的段落名
key: 要写入的键,如果该key存在则覆盖写入
val: key所对应的值
filePath: INI文件的完整路径和文件名
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace IPVOD.Hotel.Remoting
{
/// INI文件的操作类
/// </summary>
public class IniFile
{
public string Path; public IniFile(string path)
{
this.Path = path;
}
声明读写INI文件的API函数声明读写INI文件的API函数#region 声明读写INI文件的API函数
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, Byte[] retVal, int size, string filePath);
#endregion
/// 写INI文件
/// </summary>
/// <param name="section">段落</param>
/// <param name="key">键</param>
/// <param name="iValue">值</param>
public void IniWriteValue(string section, string key, string iValue)
{
WritePrivateProfileString(section, key, iValue, this.Path);
}
/// 读取INI文件
/// </summary>
/// <param name="section">段落</param>
/// <param name="key">键</param>
/// <returns>返回的键值</returns>
public string IniReadValue(string section, string key)
{
StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(section, key, "", temp, 255, this.Path);
return temp.ToString();
}
/// 读取INI文件
/// </summary>
/// <param name="Section">段,格式[]</param>
/// <param name="Key">键</param>
/// <returns>返回byte类型的section组或键值组</returns>
public byte[] IniReadValues(string section, string key)
{
byte[] temp = new byte[255]; int i = GetPrivateProfileString(section, key, "", temp, 255, this.Path);
return temp;
}
}
}
DLL导出的函数GetPrivateProfileString的重载
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, Byte[] retVal, int size, string filePath);
section:要读取的段落名
key: 要读取的键
defVal: 读取异常的情况下的缺省值
retVal: 此参数类型不是string,而是Byte[]用于返回byte类型的section组或键值组。
size: 值允许的大小
filePath: INI文件的完整路径和文件名
下面看一下具体实例化IniFile类的操作:
//path为ini文件的物理路径
IniFile ini = new IniFile(path);
//读取ini文件的所有段落名
byte[] allSection = ini.IniReadValues(null, null);
通过如下方式转换byte[]类型为string[]数组类型
string[] sectionList;
ASCIIEncoding ascii = new ASCIIEncoding();
//获取自定义设置section中的所有key,byte[]类型
sectionByte = ini.IniReadValues("personal", null);
//编码所有key的string类型
sections = ascii.GetString(sectionByte);
//获取key的数组
sectionList = sections.Split(new char[1]{'\0'});
//读取ini文件personal段落的所有键名,返回byte[]类型
byte[] sectionByte = ini.IniReadValues("personal", null);
//读取ini文件evideo段落的MODEL键值
model = ini.IniReadValue("evideo", "MODEL");
//将值eth0写入ini文件evideo段落的DEVICE键
ini.IniWriteValue("evideo", "DEVICE", "eth0");
即:
[evideo]
DEVICE = eth0
//删除ini文件下personal段落下的所有键
ini.IniWriteValue("personal", null, null);
//删除ini文件下所有段落
ini.IniWriteValue(null, null, null);
这样,在就可以使用对他们的调用,用常规的方式定义一个名为IniFile类:
tangli5668
2009-07-09
打赏
举报
回复
我想下这个文件,谁能教教我应该怎么操作的
旺旺群发 5.7版 免费旺旺群发
huhuaqiwen
2009-07-09
打赏
举报
回复
学习
qldsrx
2009-07-09
打赏
举报
回复
按照常规的XML处理不就好啦。
tangli5668
2009-07-09
打赏
举报
回复
不知道为什么留言!!!!!!!!
江城老温
2009-07-09
打赏
举报
回复
得自己写代码遍历。
C++读取
INI
文件
中
指定S
ect
ion
下的所有
key
和
key
value存放到map
中
C++读取
INI
文件
中
指定S
ect
ion
下的所有
key
和
key
value存放到map
中
INI
文件
操作
在Delphi编程环境
中
,我们可以使用内置的T
Ini
File类来方便地对
INI
文件
进行读取、保存和遍历。 一、读取
INI
文件
读取
INI
文件
中
的数据是通过T
Ini
File类的ReadString方法实现的。这个方法接受三个参数:节名、键名和...
MFC读取和写入
ini
配置
文件
在Windows编程环境
中
,MFC(Microsoft Foundat
ion
Classes)提供了一种方便的方式来处理
ini
配置
文件
。
Ini
文件
是一种简单的文本格式,常用于存储应用程序的设置和配置信息。MFC通过`C
Ini
File`类为开发者提供了读取和...
php 操作
INI
文件
,读取,设置,
ini
文件
这个函数接受一个
INI
文件
路径作为参数,返回一个关联数组,其
中
包含了
文件
中
的所有键值对。例如: ```php $config = parse_
ini
_file('config.
ini
', true); ``` 上述代码会将`config.
ini
`
文件
的内容解析为多维...
C# WinForm读写
INI
文件
INI
文件
由多个节(S
ect
ion
)组成,每个节包含一个或多个键值对(
Key
-Value Pair)。例如: ```
ini
[S
ect
ion
1]
Key
1=Value1
Key
2=Value2 [S
ect
ion
2]
Key
3=Value3 ``` 在C#
中
,没有内置的库直接处理
INI
文件
,但我们...
C#
111,120
社区成员
642,537
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章