ini文件、Unicode、_T、_L相关笔记的一些笔记
一. ini文件相关内容
- ini是什么意思?
- ini是Initialization File的缩写,意思为“配置文件;初始化文件;”,是初始化设置文件的后缀名;ini文件是windows的系统配置文件所采用的存储格式,统管windows的各项配置。ini是初始化设置文件的后缀名,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。
- 文件扩展名
- 配置文件.ini
请注意:我们所讨论的是项目中的配置文件,它是整个项目共用的。所以它要有一个项目使用的文件名,其后缀是.ini。例如:端口配置.ini
- 格式
INI文件由节、键、值组成。
节[section]
参数(键=值)name=value
注解 使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。 - 案例
;exp ini file [port] portname=COM4 port=4
- 作用
.ini , .inc之类的文件,一般是放一些常量或数据库链接语句等,再在需要的页面包含进去,和直接命为 asp 是没什么区别的。但为了安全性,最好不要用这些后缀名,因为知道文件名时,在浏览器里输入该文件的地址时,可看到所有内容的。
二. 关于VS2019下 .ini文件的读写操作
写操作:
-
使用到的函数:
1. 把信息写入系统的win.ini文件 BOOL WriteProfileString( LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串 LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节 LPCTSTR lpString // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键 2. 把信息写入自己定义的.ini文件 BOOL WritePrivateProfileString( LPCTSTR lpAppName, // 同上 LPCTSTR lpKeyName, // 同上 LPCTSTR lpString, // 同上 LPCTSTR lpFileName // 要写入的文件的文件名。 //需要注意的是,C系列的语言中,转义字符'//'表示反斜线'/'。另外,当使用相对路径时,//前的.号不能丢掉了。
-
例如: 我需要在当前目录下的ex1.ini中创建一个节(名字是INFO),并在该节中创建一个键(键的名字是张三),键值为:000。下面是我的源程序:
//要加#include<Windows.h>头文件和#include <atlstr.h> //加#include <atlstr.h>头文件是因为WritePrivateProfileString函数要加_T(),至于为啥加_T后面找到原因再补充 #include<Windows.h> #include <stdio.h> #include <atlstr.h> int main() { WritePrivateProfileString(_T("INFO"), _T("张三"), _T("000"), _T(".\\ex1.ini")); return 0; }
-
程序运行以后会在ex1.ini文件中添加以下内容:
读操作:
- 使用到的函数:
1、从系统的win.ini文件中读取信息 (1) 读取字符串 DWORD GetProfileString( LPCTSTR lpAppName, // 节名 LPCTSTR lpKeyName, // 键名,读取该键的值 LPCTSTR lpDefault, // 若指定的键不存在,该值作为读取的默认值 LPTSTR lpReturnedString, // 一个指向缓冲区的指针,接收读取的字符串 DWORD nSize // 指定lpReturnedString指向的缓冲区的大小 ) (2) 读取整数 UINT GetProfileInt( LPCTSTR lpAppName, // 同上 LPCTSTR lpKeyName, // 同上 INT nDefault // 若指定的键名不存在,该值作为读取的默认值 ) 2、从自己的ini文件中读取信息 (1) 读取字符串 DWORD GetPrivateProfileString( LPCTSTR lpAppName, // 同1(1) LPCTSTR lpKeyName, // 同1(1) LPCTSTR lpDefault, // 同1(1) LPTSTR lpReturnedString, // 同1(1) DWORD nSize, // 同1(1) LPCTSTR lpFileName // 读取信息的文件名。 ) (2) 读取整数 UINT GetPrivateProfileInt{ LPCTSTR lpAppName, // 同上 LPCTSTR lpKeyName, // 同上 INT nDefault, // 若指定的键名不存在,该值作为读取的默认值 LPCTSTR lpFileName // 同上 }
- 例如: 通过节名和键名查找ex1.ini文件中的键值,使用 GetPrivateProfileString函数读取,下面是我的源程序:
#include<Windows.h> #include <stdio.h> #include <atlstr.h> #include <iostream> using namespace std; int main() { CString str ;//定义一个CString类型的变量str,用来接调用函数的查找值 int a;//定义一个变量 GetPrivateProfileString(_T("INFO"), _T("张三"), _T(" "),str.GetBuffer(20),20, _T("./ex1.ini"));//第一个参数为节名,第二个参数为键名,第三个参数为需要查找的键值(为空就可以), 第四个参数为接收INI文件中的值的CString对象,即接收缓冲区,第五个参数为缓冲区的大小,第六个参数为要查找的文件(要输入路径)。 a = _ttoi(str);//把CString类型的值转换成int型,方便输出 printf("%d",a);//输出读取到的值 return 0; }
- 下面是我的程序运行结果:
三、有关 _T的知识:
- 百度搜索词条 :Unicode
- 百度搜索词条: UTF-8
- 在VS2019下创建工程,编码默认为Unicode格式,这时如果需要将字符串作为参数传递时会报错,错误如下:
- 解决办法:右键项目->属性->高级->高级属性->字符集->设置为 使用多字节字符集,即可解决。
- 说明:
- T:_T 会根据工程的设置自动转换UNICODE和非UNICODE
- L:_L 就是转为UNICODE