Windows API 读写.ini文件相关函数

2024-08-30 03:04

本文主要是介绍Windows API 读写.ini文件相关函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

        .ini文件常作为软件启动设置信息存储的文件,内容与jsonl有一定的相似,主要都是以键值对的形式进行数据存储。本文主要介绍Windows系统为我们提供的读写.ini文件的函数——---GetPrivateProfileInt和WritePrivateProfileString

正文

ini文件

        ini文件内容主要格式:

         节:[section]

         参数:键 = 值 (键值对)

       示例:

[Section1 Name]KeyName1=value1
KeyName2=value2[Section2 Name]KeyName3=value3
KeyName4=value4

 KeyName1、KeyName2属于节 Section1,同理  KeyName3、KeyName4属于节 Section2;

 读ini文件:GetPrivateProfileInt

        读ini文件就需要使用Windows API-- GetPrivateProfileInt函数

        函数原型

UINT GetPrivateProfileInt(  LPCTSTR lpAppName, // 节的名称  LPCTSTR lpKeyName, // 键的名称  INT     nDefault,  // 如果找不到键,则返回的默认值  LPCTSTR lpFileName // 初始化文件的名称  
);

函数参数类型 :LPCTSTR 

        它是一个宏定义,由几个部分组成:

        1.LP表示long pointer  : 长指针类型

        2.C表示const : 指针指向的内容为常量

        3.T代表在Win32环境中可能存在的_T宏,用于兼容Unicode和ANSI字符串;(具体不太清楚)

        4.STR表示这个变量是一个字符串

函数参数类型 :UINT

        无符号整型

函数参数类型 :INT

        整型

示例:

[Window]  
Width=800  
Height=600  [Colors]  
BackgroundColor=12345  
ForegroundColor=65432
int main() {  // 初始化变量来存储从INI文件中读取的值  int width, height, backgroundColor;  // 从settings.ini文件的[Window]节中读取Width和Height  width = GetPrivateProfileInt("Window", "Width", 800, "settings.ini"); // 如果找不到Width,则默认为800  height = GetPrivateProfileInt("Window", "Height", 600, "settings.ini"); // 如果找不到Height,则默认为600  // 注意:BackgroundColor在这个例子中被当作整数处理,但在实际中它可能是颜色代码字符串  // 这里我们假设INI文件中的BackgroundColor已经是一个整数  backgroundColor = GetPrivateProfileInt("Colors", "BackgroundColor", 0, "settings.ini"); // 如果找不到BackgroundColor,则默认为0  // 输出读取的值  std::cout << "Window Width: " << width << std::endl;  std::cout << "Window Height: " << height << std::endl;  std::cout << "Background Color (Integer): " << backgroundColor << std::endl;  return 0;  
}

注意事项

        1.GetPrivateProfileInt只能检索特定节(section)或键(key)的值。

        2.返回值是一个无符号整数(UINT),它对应于 INI 文件中指定键名后面的字符串的整数等效值。如果 INI 文件中找到了指定的节名和键名,并且该键名的值可以被成功转换为整数,那么函数就会返回这个整数值。

写ini文件:WritePrivateProfileString

         函数原型

BOOL WritePrivateProfileString(  LPCTSTR lpAppName,   // 节的名称  LPCTSTR lpKeyName,   // 键的名称  LPCTSTR lpString,    // 与键关联的字符串值  LPCTSTR lpFileName   // 初始化文件的名称  
);

         示例

int main() {  // 要写入的 INI 文件路径  const char* iniFilePath = "settings.ini";  // 写入 [Window] 节下的 Width 和 Height  if (!WritePrivateProfileString("Window", "Width", "800", iniFilePath)) {  std::cerr << "Failed to write Width to INI file." << std::endl;  }  if (!WritePrivateProfileString("Window", "Height", "600", iniFilePath)) {  std::cerr << "Failed to write Height to INI file." << std::endl;  }  // 写入 [Colors] 节下的 BackgroundColor 和 ForegroundColor  // 注意:虽然颜色代码通常是十六进制字符串,但这里我们仍然以字符串形式写入  // 在实际应用中,你可能需要将这些十六进制字符串转换为整数(如果适用),然后再写回为十六进制字符串  if (!WritePrivateProfileString("Colors", "BackgroundColor", "00FF00", iniFilePath)) { // 绿色  std::cerr << "Failed to write BackgroundColor to INI file." << std::endl;  }  if (!WritePrivateProfileString("Colors", "ForegroundColor", "FF0000", iniFilePath)) { // 红色  std::cerr << "Failed to write ForegroundColor to INI file." << std::endl;  }  // 如果需要,可以检查 INI 文件以验证写入是否成功  // 这里我们仅打印一条消息表示写入操作已完成  std::cout << "INI file has been updated successfully." << std::endl;  return 0;  
}

         注意事项

         WritePrivateProfileString 函数总是返回非零值以表示成功,除非出现了某种严重的错误

这篇关于Windows API 读写.ini文件相关函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119618

相关文章

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri