社区
C#
帖子详情
如何遍歷 ini 文件中所有 Section 及 Key ?
rockyvan
2009-07-09 01:37:54
如題:
如何遍歷 ini 文件中所有 Section 及 Key ?
C# 操作 ini 文件有沒有相關的系統函數?
...全文
966
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
打赏
举报
回复
得自己写代码遍历。
INI
文件
应用
参考:C#成长之路1 |
INI
文件
读写与遍历所有节点S
ect
ion
(增删改查)_getprivateprofilestring 获取所有节点-CSDN博客参考:C#获取
ini
文件
中
s
ect
ion
节点下全部
key
的值_C#学习的技术博客_51CTO博客
读取
ini
ini
文件
是文本
文件
,
中
间的数据格式一般为: [S
ect
ion
1 Name]
Key
Name1=value1
Key
Name2=value2 ... [S
ect
ion
2 Name]
Key
Name1=value1
Key
Name2=value2
ini
文件
可以分为几个 S
ect
ion
,每个 S
ect
ion
的名称用 [] 括起来。 GetPri
用Java读取
INI
文件
(带s
ect
ion
的)
最终是通过Properties来实现的,比直接字符流来读取多了很多便利. 可以直接定位到域,根据键就能拿到值.而不是遍历判断来取值 /* *
Ini
Reader.java * 用Java读取
INI
文件
(带s
ect
ion
的) * 示例: * tmp.
Ini
Reader reader = new tmp.
Ini
Reader("E:\\...
python读取配置
文件
存在某配置_用configparser模块读写
ini
配置
文件
Python标准库
中
的configparser模块,是专门用来读写配置
文件
的模块。我们常使用后缀为
ini
的
文件
来表示配置
文件
,据说
ini
配置
文件
最早出现在Win系统
中
,是
Ini
tializat
ion
File的缩写 ,现在已成为一个比较通用的格式。configparser支持的配置
文件
格式配置
文件
是一个文本
文件
,
文件
内有用方括号[]括起来的区域,称为s
ect
ion
,以及区域内的
key
/value对...
linux shell 脚本读取
ini
配置档
#!/bin/bash configFile="./config.
ini
" funct
ion
Read
INI
file() {
Key
=$1 S
ect
ion
=$2 Configfile=$3 Read
INI
=`awk -F '=' '/\['$S
ect
ion
'\]/{a=1}a==1&&$1~/'$
Key
'/{print $2;exit}' $Confi...
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章