社区
C#
帖子详情
如何遍歷 ini 文件中所有 Section 及 Key ?
rockyvan
2009-07-09 01:37:54
如題:
如何遍歷 ini 文件中所有 Section 及 Key ?
C# 操作 ini 文件有沒有相關的系統函數?
...全文
789
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
文件
中
指定
Section
下的所有
key
和
key
value存放到map
中
C++读取
INI
文件
中
指定
Section
下的所有
key
和
key
value存放到map
中
纯c读写
ini
配置
文件
纯c读写
ini
配置
文件
用c/c++读写
ini
配置
文件
有不少第三方的开源库,如
ini
parser、lib
ini
、rw
ini
、UltraLight
INI
Parser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种注释、跨平台换行符支持、带引号字符串处理、无
section
操作、原格式保持等方面存在问题。 现将本人精心制作的
ini
读写程序源码奉献给大家,纯c编写,简洁好用。支持windows和linux。 主要特点: 1、支持;和#注释符号,支持行尾注释。 2、支持带引号'或"成对匹配的字符串,提取时自动去引号。引号
中
可带其它引号或;#注释符。 3、支持无
section
或空
section
(名称为空)。 4、支持10、16、8进制数,0x开头为16进制数,0开头为8进制。 5、支持
section
、
key
或=号前后带空格。 6、支持\n、\r、\r\n或\n\r换行格式。 7、不区分
section
、
key
大小写,但写入时以新串为准,并保持其大小写。 8、新增数据时,若
section
存在则在该节最后一个有效数据后添加,否则在
文件
尾部添加。 9、支持指定
key
所在整行删除,即删除该键值,包括注释。 10、可自动跳过格式错误行,修改时仍然保留。 11、修改时保留原注释:包括整行注释、行尾注释(包括前面空格)。 12、修改时保留原空行。以上三点主要是尽量保留原格式。 不足之处: 1、不支持单
key
多value(逗号分割),只能一次性提取后自行处理。 2、不支持同名重复
section
和
key
。(重复
section
可视为错误,重复
key
则可能造成分歧) 3、不能提取所有
section
或
key
名称。 使用只需两个
文件
ini
rw.h、
ini
rw.c,另有测试程序和工程
文件
,支持windows和linux。
【2021】UI自动化测试框架(Selenium3)
适合人群:【学习前提】 1. 具备python3语言基础 【学习人群】 1. 手工测试人员学习UI自动化测试技能 2. 开发人员转岗测试开发岗位 3. 如具有丰富的自动化测经验,本课程可能并不满足你学习计划:1.下载课程
中
配套的软件资料 2.结合课件
中
Demo可完成学习任务课程目标:掌握UI自动化测试框架的设计与实现课程简介:UI自动化框架的设计需储备基础知识,方能完成自动化测试框架的实现,如数据驱动、日志、配置
文件
等AutoUiTestFrame自动化框架的目录结构初步进行规划,目录结构如下:Config 配置
文件
的目录v config.
ini
配置
文件
;v globalconfig.py 获得日志路径、测试用例路径、测试报告路径、测试数据路径;v Data 测试数据;v TestData.xlsx 测试数据。Public 公共
文件
库v Common 封装的公共的方法n Commonconfig.py 公共的参数配置:调试过程
中
的测试数据等;n DoExcel.py 操作excel(数据驱动);n Send_mail.py 发送邮件(html);n ReadConfig
Ini
.py 读取
ini
格式的配置
文件
;n TestCaseInfo.py 测试用例信息;n Log.py 日志类。设置日志类,其他模块或
文件
需要日志类时,调用该
文件
。v Pages 使用po模式设计的测试页面n BasePage.py 基类,对一些测试页面公共方法、属性的封装及webdrive一些方法的二次封装;n Bing.py 测试页面。Report 测试报告v Log 日志目录n *****log日志。v TestReport 测试报告目录n ***html测试报告。TestCase 测试用例v TC_bing.py。Run.py 控制测试用例的运行。
C#
ini
文件
进行读和写操作
C#可以对
ini
文件
进行读和写操作。包括:读取
key
的值、保存
key
的值、读取所有
section
、读取所有
key
、移除
section
、移除
key
等操作。文章地址:http://www.cnblogs.com/polk6/p/6052908.html
qt遍历
ini
配置
文件
假设有一个
ini
文件
的内容如下: [test] test11=666 test22=a [ceshi] aaa=11 bbb=32 ccc=0 执行如下代码,遍历
ini
文件
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSettings set("./test.
ini
",QSet...
C#
110,552
社区成员
642,562
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章