VC ini配置文件常用操作

2023-10-31

A.读写ini文件

ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。

写函数(一个):

BOOL WritePrivateProfileString();//写字符串

读函数(两个):

DWORD GetPrivateProfileString();//读字符串数据
UINT GetPrivateProfileInt();//读整型数据

如:

[Student]	//Section,节
Name = yu	//Key,键
Age = 25	// Key,键

#写函数只有一个,所以int数据要先转换成CString,然后再写。

#配置文件没有修改函数,如果要修改某个key的值,那么直接往该key中写入即可

#如果 ini中没有指定的 SectionAPI会新建 Section,如果没有指定的 Key则新建一个 Key 并写入数据,如果已经存在,则用字符串代替原来的值。当指定的 ini也不存在的时候,API会自动建立一个新的文件

 

写配置文件:

{
	CString StrName,StrAge;//姓名,年龄
	int nAge;

	StrName = _T("yu");
	nAge = 25;
	StrAge.Format(_T("%d"),nAge);//将int数据转换为CString,然后写入

	//WritePrivateProfileString(Section名,Key名,CString数据,文件地址);
	::WritePrivateProfileString(_T("Student"),_T("Name"),StrName,_T(".\\setting.ini"));//写入姓名
	::WritePrivateProfileString(_T("Student"),_T("Age"),StrAge,_T(".\\setting.ini"));//写入年龄
}

读配置文件:

{
	CFileFind finder;//定义标准类对象
	BOOL isFind;
	isFind = finder.FindFile(_T(".\\setting.ini"));//是否查找到文件(内为文件路径)
	if (isFind)
	{
		CString strName, strAge;
		int age;
	
		//读取名字
		::GetPrivateProfileString(_T("Student"), _T("Name"), _T("NULL"), strName.GetBufferSetLength(15), 15, _T(".\\setting.ini"));
		//Section名,Key名,默认值,存储字符串,字符串所允许的最大长度(15),文件路径
		strName.ReleaseBuffer();//此操作对应于GetBufferSetLength(),紧跟其后,不能忽略。此操作的作用是将GetBufferSetLength()申请的多余的内存空间释放掉,以便于可以进行后续的如字符串+操作
		m_edit_name.SetWindowText(strName);
	
		//读取年龄
		age = ::GetPrivateProfileInt(_T("Student"), _T("Age"), 0, _T(".\\setting.ini"));
		//Section名,Key名,默认值,文件路径
		strAge.Format(_T("%d"), age); //将int型数据转换为CString类型数据
		m_edit_age.SetWindowText(strAge);
	
		UpdateData(FALSE);
	}
}

三个函数的原型:

写函数(一个)

BOOL WritePrivateProfileString(//写字符串
	LPCTSTR lpAppName,  // pointer to section name
	LPCTSTR lpKeyName,  // pointer to key name.若为NULL,删除整个Section
	LPCTSTR lpString,   // key的具体内容。若为NULL,删除整个Key
	LPCTSTR lpFileName  // ini文件所在路径
);

读函数 ( 两个 )

DWORD GetPrivateProfileString(//读字符串数据
	LPCTSTR lpAppName,        // points to section name
	LPCTSTR lpKeyName,        // points to key name
	LPCTSTR lpDefault,        // 默认返回值,读取失败时返回
	LPTSTR  lpReturnedString, // 字符串缓冲区,读取的数据存储在这里
	DWORD   nSize,            // 缓冲区最大值
	LPCTSTR lpFileName        // ini文件所在路径
);
UINT GetPrivateProfileInt(//读整型数据
	LPCTSTR lpAppName,  // address of section name
	LPCTSTR lpKeyName,  // address of key name
	INT	 nDefault,    // 默认返回值,读取失败时返回
	LPCTSTR lpFileName  // ini文件所在路径
);

B .删除 Section Key

注意写函数:

BOOL WritePrivateProfileString(//写字符串
	LPCTSTR lpAppName,  // pointer to section name
	LPCTSTR lpKeyName,  // pointer to key name.若为NULL,删除整个Section
	LPCTSTR lpString,   // key的具体内容。若为NULL,删除整个Key
	LPCTSTR lpFileName  // ini文件所在路径
);
故如果要:

删除某个Section将函数第二个和第三个参数设置为NULL

::WritePrivateProfileString(_T("Student"),NULL,NULL,_T(".\\setting.ini"));

删除某个Key将函数第三个参数设置为NULL

::WritePrivateProfileString(_T("Student"),_T("Name"),NULL,_T(".\\setting.ini"));

 

C.获取ini文件中所有的Section

使用GetPrivateProfileSectionNames()函数来获取所有的Section名。

DWORD GetPrivateProfileSectionNames(
	LPTSTR lpszReturnBuffer,  // address of return buffer
	DWORD nSize,              // size of return buffer
	LPCTSTR lpFileName        // address of initialization filename
);
函数返回值为读入缓冲区的字符数。

该函数用于从ini文件中获取所有的Section名。当不知道ini中有哪些Section的时候使用该api函数。

如ini中有两个Section: [sec1]和[sec2],则返回的是:  'sec1 ',0, 'sec2',0,0

即两个Section名之间有符号’0’。最后结尾也是符号’0’。所以最后会有两个连续的符号’0’。

可以使用该函数来求Section的个数。其原理是:将所有的Section名都找出来,然后统计节名的个数。

 

D.所有的ini文件函数

APIINI文件的函数有

BOOL WritePrivateProfileString(

	LPCTSTR lpAppName,	// 节名
	LPCTSTR lpKeyName,	// 键名 
	LPCTSTR lpString,	// 添加的字符串 
	LPCTSTR lpFileName  // Ini文件名 
);

BOOL WritePrivateProfileStruct(
	LPCTSTR lpszSection,	// pointer to section name
	LPCTSTR lpszKey,		// pointer to key name
	LPVOID lpStruct,		// 要写入的数据缓冲区
	UINT uSizeStruct,		// 缓冲区的大小
	LPCTSTR szFile			// pointer to initialization filename
);
BOOL WritePrivateProfileSection(

	LPCTSTR lpAppName,	// pointer to string with section name 
	LPCTSTR lpString,	// 写入的字符串
	LPCTSTR lpFileName  // pointer to string with filename 
);
API INI 文件的函数有
DWORD GetPrivateProfileString(

	LPCTSTR lpAppName, // points to section name 
	LPCTSTR lpKeyName, // points to key name 
	LPCTSTR lpDefault, // 默认字符串 ,如果没有则返回该值
	LPTSTR lpReturnedString, // 返回的字符串 
	DWORD nSize, // 返回字符串的大小 
	LPCTSTR lpFileName  // points to initialization filename 
);
DWORD GetPrivateProfileSection(

	LPCTSTR lpAppName, // address of section name 
	LPTSTR lpReturnedString, // address of return buffer 
	DWORD nSize, // size of return buffer 
	LPCTSTR lpFileName  // address of initialization filename  
);
UINT GetPrivateProfileInt(

	LPCTSTR lpAppName, // address of section name
	LPCTSTR lpKeyName, // address of key name
	INT nDefault, // return value if key name is not found
	LPCTSTR lpFileName  // address of initialization filename
);
BOOL GetPrivateProfileStruct(

	LPCTSTR lpszSection, // address of section name
	LPCTSTR lpszKey, // address of key name
	LPVOID lpStruct, // address of return buffer
	UINT uSizeStruct, // size of return buffer
	LPCTSTR szFile // address of initialization filename
);
DWORD GetPrivateProfileSectionNames(

	LPTSTR lpszReturnBuffer, // address of return buffer 
	DWORD nSize, // size of return buffer 
	LPCTSTR lpFileName // address of initialization filename
);


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC ini配置文件常用操作 的相关文章

随机推荐

  • Yolov3中Anchor box和confidence的理解(公式未编辑 待续....)

    Anchor box bounding box prior Anchor box原理解释 1 Anchor box其实就是从训练集的所有ground truth 中通过统计聚类的方法 k mean 得到常用的尺寸大小 比如 在某个训练集中最
  • MySQL有哪些锁

    这次 来说说 MySQL 的锁 主要是 Q A 的形式 看起来会比较轻松 在 MySQL 里 根据加锁的范围 可以分为全局锁 表级锁和行锁三类 全局锁 全局锁是怎么用的 要使用全局锁 则要执行这条命 flush tables with re
  • flutter 自定义组件-抽奖大转盘

    import dart async import dart math import dart ui as ui import dart ui import package demo widget luck luck entity dart
  • TypeScript 变量声明 —— 类型断言(Type Assertion)

    类型断言 Type Assertion TypeScript 允许你覆盖它的推断 并且能以任何你想要的方式分析它 这种机制被称为类型断言 类型断言使用 as 关键字或者
  • 查出反向木马的反向连接域名

    来源 ttian net 反向木马的主要种植手段是通过IE的众多漏洞 bt下载时不小心运行 或者来路不明的软件 使未打补丁的用户点击之后下载运行了木马程序 而这些用户基本都是拥有动态IP的个人用户 若不使用反向连接的方式 势必无法长久控制
  • k8s中创建pv和pvc

    1 创建一个pv apiVersion v1 kind PersistentVolume metadata name pv0003 名称 spec capacity storage 5Gi 卷大小 volumeMode Filesystem
  • Unity中自动识别串口以及热拔插

    最近需要在Unity中实现自动识别热拔插并识别串口的功能 实在没有找到原生的消息响应 折腾了一周 尝试了多种方法 总结一下主要有3种实现思路 1 利用Form类中的消息进行串口拔插消息的接收 2 实时保存串口信息到外部文件 进行判别 3 读
  • Vscode中安装 n 命令来切换 node 版本以适应不同项目不同的node版本号

    一 问题描述 Centos中第一次安装的node 因为下载的源码是最新的 是最新的版本18 14 0的 但发现项目启动的时候提示 二 解决办法 这时候会有两个选择 卸载node然后重新安装符合项目的版本 比较麻烦 有时候可能node还卸载不
  • 踩坑道路之——ubuntu下pt query digest无法分析慢查询日志

    刚才在使用pt query digest分析慢查询日志的时候 当我优雅的敲出 sudo pt query digest var lib mysql yang K45VD slow log 此时终端并没有像我所希望的那样 现实慢查询的分析结果
  • 浏览器内核,user-agent

    最近web界被红芯事件吵得沸沸扬扬 也激起了我对浏览器内核进一步的学习热情 先来看看user agent 它是我们前端开发获取用户操作系统 浏览器版本等数据的常用方法 UA存在于每次http请求的请求头中 像这样 Mozilla 5 0 W
  • 鸽子学统计

    文章目录 第一部分 基础统计 0 统计学的目的和本质 0 1 随机变量 0 2 统计分析的目的 0 3 统计学的本质 1 描述统计 1 1 变量的测量尺度分类 1 2 均值 1 3 众数和中位数 1 4 极差和标准差 1 5 偏度和峰度 1
  • linux:argument list too long的解决方案

    问题 展示 删除的文件数目过多时 linux命令会报错 如下 rm 命令 rm txt zsh argument list too long rm ls命令 ls txt zsh argument list too long ls 原因 猜
  • Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知

    Outlook用户使用场景 在企业中 会议和活动的顺利举行对于业务运转和团队协作至关重要 然而 计划的变动总是无法避免 这可能会导致其他人的计划受到影响 打乱原有的安排 为了解决这个问题 许多企业开始使用各种工具和技术来确保信息的及时传递和
  • 【计算机网络】MAC帧和PPP帧(定义+使用范围+区别+共同点)

    目录 0 前言 1 PPP的定义 1 1 点对点协议PPP Point to Point Protocol PPP 1 2 PPP帧 1 3 PPP帧的格式 1 3 1 首部 1 3 2 尾部 2 MAC的定义 2 1 媒体接入控制层MAC
  • 数据库多版本读场景

    session 1 session 2 select a from test return a 10 start transaction update test set a 20 start transaction select a fro
  • Qt 菜单栏QMenu、下拉菜单QAction、工具栏QToolBar的使用

    如下内容是实现一个菜单栏以及下拉菜单的制作 在mainwindow h中添加如下内容 1 class QAction 2 class QMenu 在pro中添加QT widgets QMenu类作为菜单栏 QAction类作为点击菜单栏的下
  • CTF 隐写工具Steghide

    Steghide 是一个可以将文件隐写到图片或者音频得工具 Steghide支持以下图像格式 JPEG BMP WAV AU文件 apt get install steghide 使用查看帮助文件 steghide help steghid
  • 谷粒商城2-环境安装

    谷粒商城2 环境安装 一 安装VirtualBox 1 官网下载 https www virtualbox org wiki Downloads 2 开启CPU虚拟化 3 下载vagrant安装虚拟机镜像 https www vagrant
  • Y9000X 2022 i7-12700H+3060 安装ubuntu18.04.6+问题记录

    Y9000X 2022 i7 12700H 3060 安装ubuntu18 04 6 问题记录 前言 1 Ubuntu18 04 安装 1 1 官网下载Ubuntu18 04 6 镜像 1 2 U盘启动盘制作 1 3 系统安装 2 问题总结
  • VC ini配置文件常用操作

    A 读写ini文件 ini文件 即Initialization file 这种类型的文件中通常存放的是一个程序的初始化信息 ini文件由若干个节 Section 组成 每个Section由若干键 Key 组成 每个Key可以赋相应的值 读写