ini配置文件读写操作入门
来源:互联网 发布:泰格软件好用吗 编辑:程序博客网 时间:2024/05/18 15:51
ini配置文件读写操作入门
ini文件(Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。
ini 文件是文本文件,中间的数据格式一般为:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName1=value1
KeyName2=value2
Win32 对 ini 文件操作的API中,有一部分是对 win.ini和system.ini 操作的,有一部分是对用户自定义的 ini 文件操作的。
一、对win.ini和system.ini的操作
Win.in 和 system.ini 是Windows的两个非常重要的初始化文件,Windows将用户所作的选择以及各种变化的系统信息记录在这两个文件中。System.ini 描述了系统硬件的当前状态,Win.ini 文件则包含了Windows 系统运行环境的当前配置。由于 Win.ini 文件的重要性和常用性,Win32 中有专门对 Win.ini 进行操作的 API。
它们是:
1)GetProfileInt - 从 Win.ini 文件的某个 Section 取得一个 key 的整数值。
2)GetProfileString - 从 Win.ini 文件的某个 Section 取得一个 key 的字符串。
3)GetProfileSection - 从 Win.ini 文件中读出整个Section 的内容。
4)WriteProfileSection - 将一个整个 Section 的值写入Win.ini 文件的指定的Section 中.
5)WriteProfileString - 将一个 Key 值写入 Win.ini 文件的指定 Section 中。
如果 Win.ini 没有指定的 Section,API 会新建 Section,如果没有指定的 Key 则新建一个 Key 并写入数据,如果已经存在,则用字符串代替原来的值。相应API接口函数的原型可以在网上查阅相关博客了解其使用情况。
二、对自定义ini文件的操作
以上的 API是对操作系统的文件 Win.ini和system.ini的操作,当然对于我们来说,用的更多的是在程序运行的目录中建立自己的ini 文件,如果需要对自己的ini 文件操作,就要用到另一组API,这一组API和上面的类似,只要把上面一组的 Profile 换成 PrivateProfile(私有的)就可以了,参数中也相应的多了一个 ini 文件名的参数。例如 GetPrivateProfileInt、GetPrivateProfileString ,WritePrivateProfileString 等等。这里着重的介绍一下这三个API函数的原型及用法。
三、配置文件路径问题
在对ini文件进行读写时,文件可以使相对路径或者绝对路径,用户可根据自己的需要进行选择。下面说一下相对路径和绝对路径的格式:
1) ".\\IniFileName.ini" // 这样的为相对路径
2) "D:\\IniFileName.ini" // 这样的为绝对路径
需要注意的是,C系列的语言中,转义字符'\\'表示反斜线'\'。另外,当使用相对路径时,\\前的.号不能丢掉了。
四、ini文件操作示例
1.不采用Cstring存取字符串形式
#include <iostream> #include <windows.h>//这个头文件一定要添加,否则GetPrivateProfileString(...)函数无法使用 #include "shlwapi.h" #pragma comment(lib, "Shlwapi")//这两个文件用于!PathFileExists函数的正常使用int main() {#ifndef CONFIG_FILE#define CONFIG_FILE TEXT(".\\CONFIG.ini")//保存的ini文件放在根目录下,不能直接保存为“CONFIG.ini”#endifWritePrivateProfileString(TEXT("Teacher"), TEXT("Name"), TEXT("brother Dong "), CONFIG_FILE);WritePrivateProfileString(TEXT("Teacher"), TEXT("Age"), TEXT("100"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Name1"), TEXT("Alex"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Age1"), TEXT("23"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Name2"), TEXT("Lauretta"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Age2"), TEXT("21"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Name3"), TEXT("Dudiu"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Age3"), TEXT("21"), CONFIG_FILE);WritePrivateProfileString(TEXT("Others"), TEXT("Name"), TEXT("Boby"), CONFIG_FILE);WritePrivateProfileString(TEXT("Others"), TEXT("Age"), TEXT("12"), CONFIG_FILE);TCHAR szKeyValue[MAX_PATH] = { 0 };if (!PathFileExists(TEXT(".\\CONFIG.ini")))//判断文件是否存在{printf("ERROR");}GetPrivateProfileString(TEXT("Teacher"), TEXT("Name"), TEXT("ERROR"), szKeyValue, MAX_PATH, TEXT(".\\CONFIG.ini"));//获取为字符串的键值printf("szKeyValue=%S\n", szKeyValue);int nValue = GetPrivateProfileInt(TEXT("Others"), TEXT("Age"), 0, TEXT(".\\CONFIG.ini"));//获取为整型的键值printf("nvalue=%d\n", nValue);return 0;}
2.采用Cstring存取字符串形式
#include <iostream> #include <windows.h>//这个头文件一定要添加,否则GetPrivateProfileString(...)函数无法使用 #include "shlwapi.h" #include<atlstr.h>//记得包含该头文件,否则Cstring显示未定义标识符#pragma comment(lib, "Shlwapi")//这两个文件用于!PathFileExists函数的正常使用int main() {#ifndef CONFIG_FILE#define CONFIG_FILE TEXT(".\\CONFIG.ini")//保存的ini文件放在根目录下,不能直接保存为“CONFIG.ini”#endifWritePrivateProfileString(TEXT("Teacher"), TEXT("Name"), TEXT("brother Dong "), CONFIG_FILE);WritePrivateProfileString(TEXT("Teacher"), TEXT("Age"), TEXT("100"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Name1"), TEXT("Alex"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Age1"), TEXT("23"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Name2"), TEXT("Lauretta"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Age2"), TEXT("21"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Name3"), TEXT("Dudiu"), CONFIG_FILE);WritePrivateProfileString(TEXT("Student"), TEXT("Age3"), TEXT("21"), CONFIG_FILE);WritePrivateProfileString(TEXT("Others"), TEXT("Name"), TEXT("Boby"), CONFIG_FILE);WritePrivateProfileString(TEXT("Others"), TEXT("Age"), TEXT("12"), CONFIG_FILE);if (!PathFileExists(TEXT(".\\CONFIG.ini"))){printf("ERROR");}CString szKeyValue;GetPrivateProfileString(TEXT("Teacher"), TEXT("Name"), TEXT("Error"), szKeyValue.GetBuffer(20), 20, TEXT(".\\CONFIG.ini"));//字符串输出方式1std::wcout << "szKeyValue = "<<szKeyValue.GetBuffer(0) << std::endl;//字符串输出方式2//printf("szKeyValue=%S\n", szKeyValue);int nValue = GetPrivateProfileInt(TEXT("Others"), TEXT("Age"), 0, TEXT(".\\CONFIG.ini"));printf("nvalue=%d\n", nValue);return 0;}
五、注意事项
1.读取INI时,会先从头找Section,找到后即在此Section中查找Key,要是在这个Section找不到此Key的话,即认为此Key不存在,即便此后还有同名的Section-Key定义。比如下面这个具体的例子里,使用GetPrivateProfileString则永远无法成功读取到Section1Key2。
[Section1]
Section1Key1=???
[Section2]
Section2Key1=???
[Section1]
Section1Key2=??? //× 永远无法找到它
2.在非MFC下使用Cstring会导致Cstring显示为“为声明的标识符”,有如下解决办法:
1)如果你使用VC.NET,那么使用MFC,应包含:#include<cstringt.h>或者#include<afx.h>
2)不适用MFC,应包含#include<atlstr.h>
最后想说的是,在Windows系统中,ini文件是很多,最重要的就是“System.ini”、“System32.ini”和“Win.ini”。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改ini文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,ini文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。
- ini配置文件读写操作入门
- 配置文件读写操作(.ini)
- Delphi中读写INI配置文件操作总结
- 【工具类】-ini配置文件读写操作类
- ini配置文件读写
- 读写配置文件 ini
- C#读写INI配置文件
- C++读写ini配置文件
- VC++读写INI配置文件
- C#读写ini配置文件
- C++读写ini配置文件
- C#读写ini配置文件
- C#读写ini配置文件
- C#读写INI配置文件
- INI配置文件读写
- 读写配置文件(.ini)
- VC ini配置文件读写
- python 读写 .ini 配置文件
- java反射
- EOJ 1819 询问
- Mikado - pick your transcript
- <顺序表>从一个无序顺序表(也可以有序)中删除重复的元素,并使剩余元素间的相对次序保持不变
- 浅谈自动化功能测试
- ini配置文件读写操作入门
- unity帧动画的几种方式比较
- 关于指针的说明1——指针.c
- 分枝限界法
- 3831: [Poi2014]Little Bird
- 数据的优化
- Best Time to Buy and Sell Stock
- JZOJ4090. 树上三角形
- 安装和测试Kafka