Config配置文件读写

news2024/11/25 23:01:19

配置文件本质上是包含成功操作程序所需信息的文件,这些信息以特定方式构成。它们不是在程序中进行硬编码,而是用户可配置的,通常存储在纯文本文件中。

写配置文件

使用函数WritePrivateProfileStringW写配置文件

BOOL WritePrivateProfileStringW(
  [in] LPCWSTR lpAppName,
  [in] LPCWSTR lpKeyName,
  [in] LPCWSTR lpString,
  [in] LPCWSTR lpFileName
);
  • 参数lpAppName

表示ini文件中的一个字段名(节名),可以有很多节名

  • 参数lpKeyName

表示lpAppName下的一个键名

  • 参数lpString

表示键值,也就是变量的值

  • 参数lpFileName

表示完整的ini文件名

读配置文件

使用GetPrivateProfileStringW读取配置文件

DWORD GetPrivateProfileStringW(
  [in]  LPCWSTR lpAppName,
  [in]  LPCWSTR lpKeyName,
  [in]  LPCWSTR lpDefault,
  [out] LPWSTR  lpReturnedString,
  [in]  DWORD   nSize,
  [in]  LPCWSTR lpFileName
);
  • 参数lpAppName

表示INI文件中的一个字段名(节名)。如果此参数为NULL,则函数会将文件中的所有节名复制到提供的缓冲区。

  • 参数lpKeyName

要检索其关联字符串的键的名称。如果此参数为NULL,lpAppName参数指定的节中的所有键名称都将复制到lpReturnString参数指定的缓冲区中。

  • 参数lpDefault

默认字符串。如果在初始化文件中找不到lpKeyName键,GetPrivateProfileString会将默认字符串复制到lpReturnString缓冲区。如果此参数为NULL,则默认值为空字符串 “”。避免指定带有尾随空白字符的默认字符串。该函数在lpReturnString缓冲区中插入一个字符,以去除任何尾随空格。

  • 参数lpReturnedString

表示指向接收缓冲区的指针。

  • 参数nSize

表示指向的缓冲区的大小(以字符为单位)。

  • 参数lpFileName

初始化文件的名称。如果此参数不包含文件的完整路径,系统将在 Windows 目录中搜索该文件。

Demo示例

写配置文件

通过GetCurrentDirectory获取当前程序所在目录,在当前目录下创建INI文件。

//读写配置文件

void CMyFileCFileView::OnWriteConfig() {
	//获取当前路径
	WCHAR strPath[MAX_PATH] = { 0 };
	GetCurrentDirectoryW(MAX_PATH, strPath);
	CString strFilePath;
	strFilePath.Format(L"%ls//Test.ini", strPath);	//字符串拼接
	WritePrivateProfileStringW(L"metada", L"title", L"搜狗双拼", strFilePath);	//段名、键名、内容
	WritePrivateProfileStringW(L"声母", L"ch", L"I", strFilePath);
	WritePrivateProfileStringW(L"声母", L"sh", L"U", strFilePath);
}

读配置文件

读取配置文件,通过TRACE将读取的值显示出来。

//读配置文件
void CMyFileCFileView::OnReadConfig() {
	WCHAR strPath[MAX_PATH] = { 0 };
	WCHAR strTitle[MAX_PATH] = { 0 };
	WCHAR strCh[MAX_PATH] = { 0 };
	WCHAR strSh[MAX_PATH] = { 0 };
	//获取当前路径
	GetCurrentDirectoryW(MAX_PATH, strPath);
	TRACE("## strPath = %ls", strPath);

	CString strFilePath;
	strFilePath.Format(L"%ls//Test.ini", strPath);	//字符串拼接
	DWORD dwNum1 = GetPrivateProfileStringW(L"metada", L"title", NULL,
		strTitle, MAX_PATH, strFilePath);

	DWORD dwNum2 = GetPrivateProfileStringW(L"声母", L"ch", NULL,
		strCh, MAX_PATH, strFilePath);

	DWORD dwNum3 = GetPrivateProfileStringW(L"声母", L"sh", NULL,
		strSh, MAX_PATH, strFilePath);

	TRACE("#dwNum1 = %d , dwNum2 = %d , dwNum3 = %d", dwNum1, dwNum2, dwNum3);
	USES_CONVERSION;
	char* szTitle = W2A(strTitle);
	char* szSh = W2A(strSh);
	char* szCh = W2A(strCh);
	TRACE("#strTitle = %s , strCh = %s , strSh = %s", szTitle, szCh, szSh);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

filter: grayscale(1); | 网页变灰

效果 MDN: https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function/grayscalegrayscale(amount)对图片进行灰度转换转换值的大小,可以是 或 . 当值为 100% 时,灰度最大。0% 时与原图没有区别。0% 到 100% 之间的值会使灰度线性变化。amount …

JVM学习笔记(2)—— 运行时数据区概述及线程

在上一篇中我们讲了JVM的类加载子系统,现在我们就来到了运行时数据区。而不同版本的JVM对于内存的划分方式和管理机制存在着部分差异(最典型的就是方法区实现的差异),本文针对经典的Hotspot jvm进行讨论,对运行时数据区…

Mongoose应用和文件上传

一、Express框架访问MongoDB数据库 1、目的: ​ (1)mongoose模块的使用 ​ (2)学会代码的封装:dao层、service层、接口层 ​ (3)MVC设计思想:M(Model)、V(View)、C(C…

WEB前端期末大作业——关于酒店主题网站设计——高级酒店公寓网页(4页)

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

如何使用gitee码云?创建库,克隆远程仓库,上传代码,小绿格等问题

目录 前提软件:先安装Git,再安装TortoiseGit(可以在网上找找~默认下一步安装即可) 一、访问网站Gitee - 基于 Git 的代码托管和研发协作平台 二、创建库 二、克隆远程仓库到本地电脑 - 仓库与本地链接 三、上传文件到gitee库里…

【Linux基础知识点】内核、系统调用、Shell、指令集、微架构、硬件架构、用户态、内核态、进程、用户线程、内核线程

参考 Linux内核版本和发行版本Linux架构用户态和内核态的简单理解「建议收藏」CPU、操作系统内核、ARM内核与架构的理解【科普】一文看懂指令集是什么一文搞懂X86架构和ARM架构的区别线程和进程的区别是什么?如何理解内核线程、内核进程? 讲解 知识点详…

Linux 业务突然宕机、系统卡死、磁盘空间爆满,该怎么查?

场景 在服务器运维过程中,我们偶尔会发现业务突然宕机,进去服务器发现异常卡顿查看服务器磁盘空间发现磁盘满载。 如何找到占用空间大的目录或文件? 1、比较笨的方法: 在根目录下,du -hs命令,列出各目录…

Redis缓存问题

目录 1、缓存穿透 2、缓存击穿 3、缓存雪崩 ​​​​​​​4、Redis的并发竞争key问题 ​​​​​​​1、缓存穿透 大量请求缓存中和数据库不存在的数据。 大量用户请求缓存中和数据库中不存在的数据,导致所有请求都落到数据库上,造成数据库短时间内承…

GAMES202 Real-Time Global Illumination

文章目录Lecture 7 Real-time Global Illumination (in 3D)RSM (Reflective Shadow Maps)Lecture 8 Real-time Global Illumination (screen space)LPV (Light Propagation Volumes)VXGI (Voxel Global Illumination)SSAO (Screen Space Ambient Occlusi…

零基础如何入门Web性能测试?

1、目前正在研究jmeter,请问初期做性能,应先从几点做起? Jmeter和LR都是目前性能测试的首选工具,如果你有LR的学习背景,那么Jmeter上手会很快,重点理解线程和进程的概念,流程和LR是类似的。如果…

ISO27001信息安全管理体系具体要求 学习笔记

ISO27001制定背景 ISO27000 从诞生到现在只不过 20 年间的事情,但基本上可以看出一个标准 “源于生活,高于生活”的发展特点,也就是说,一个真正普遍适用并能被普遍接受的标准,必然是能体现相关领域最佳惯例并能为最佳…

这篇文章告诉你视频转音频软件哪个好用,有需自取

大家看过线下的演唱会或livehouse吗?有些歌手会在现场准备一些小彩蛋,例如演唱还未发行的歌,或是歌曲的其它版本,这时候许多歌迷都会纷纷录制下来,以便后续的欣赏观看。 但是每次想听的时候,都得反复的打开…

工业外观设计中色彩如何有效运用

我相信业内很多设计师都在考虑如何在工业产品外观设计中有目的地运用色彩。最近看了一篇关于如何在工业产品中使用色彩的论文,简单地说了一下自己的想法。 一、加工技术应考虑产品外观设计 工业设计师不仅要考虑材料,还要考虑其表面处理及其颜色。因此&a…

抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品

这篇内容关于适合玩私域的三类产品,精简一下让大家可以3分钟看完。不玩悬念,直接上千货。 上一篇在我赢助手小禾呈序上给大家讲了三个变现的建议,以及两种我比较推荐的变现方式。带货和支付费。今天再讲一个主流的变现思路,最后还…

Android Material Design之MaterialButtonToggleGroup(九)

效果图 资源引入 implementation androidx.appcompat:appcompat:1.3.0 implementation com.google.android.material:material:1.4.0属性 属性描述android:id控件Idandroid:layout_width控件长度android:layout_height控件高度app:checkedButton默认选中得按钮idapp:selectio…

物联网毕业设计 单片机家庭气象站设计与实现

文章目录1 简介2 主要器件引脚连接3 实现效果4 部分实现代码1 简介 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学校对毕设的要求越来越高&#x…

揭秘你代理商做不起来货卖不出去的原因,探讨其背后的商业逻辑

现在很多代理商,大都是可以归于“个体户”性质。这些也代表了微小型企业,从前期的蓬勃发展,到现在的经营受限,特别是疫情等影响,很多人的经营都处于举步维艰的状态,如果你们现在是代理商,仓库里…

v-charts,点击页面按钮,不能二次重绘,解决方案

v-charts简介: 是基于 Vue2.0 和 Echarts 封装的图标组件,只需要统一提供一种对前后端都友好的数据格式设置简单的配置项,就可以生成常见的图表。 v-charts官方文档:v-charts echarts官方文档:Documentation - Apach…

8个关于 Promise.then 和 Promise.catch 的面试题,一定要掌握

前面,我们要讨论了 Promise 在异步编程中的执行,错过的朋友可以直接点击《10 个 JavaScript Promise 的面试题》这篇文章进行查看。 在今天的文章中,我们将讨论这些核心 API 用于 Promise 对象的用法。 这里我提供了10个代码片段&#xff0…

SequoiaDB湖仓一体分布式数据库2022.11月刊

本月看点速览 产品能力再获认可,入围多个榜单、报告 ‍精彩亮相2022沙丘大会湖仓一体专场 实力吸睛,获多家权威媒体关注与报道 生态圈不断扩大,与6家合作伙伴完成互认证 青杉计划2023进行中,一起攀登更高的“杉” 产品能力再获…