什么是ini文件?
initialization File,即为初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置。或者作为项目中的配置文件,为整个项目所共用。
文件格式为 节、键、值。其中节为[Section name], 参数为 key(键)=value(值)。
ini文件中注解使用分号表示(;),在分号后面的文字,直到该行结尾都全部为注解。
[Section Name]用来表示一个段落,INI文件可能是项目中共用的,所以使用[Section Name]段名来区分不同用途的参数区。key就用来表示参数名,value表示对应的值。
ini文件读
1、从系统的win.ini文件中读取信息
(1) 读取字符串
DWORD GetProfileString(
LPCTSTR lpAppName, // 节名【不区分大小写】
LPCTSTR lpKeyName, // 键名,读取该键的值【不区分大小写】
LPCTSTR lpDefault, // 若指定的键不存在,该值作为读取的默认值
LPTSTR lpReturnedString, // 一个指向缓冲区的指针,接收读取的字符串
DWORD nSize // 指定lpReturnedString指向的缓冲区的大小
)
如:
CString str;
::GetProfileString("Test","id","Error",str.GetBuffer(20),20);
(2) 读取整数
UINT GetProfileInt(
LPCTSTR lpAppName, // 同上
LPCTSTR lpKeyName, // 同上
INT nDefault // 若指定的键名不存在,该值作为读取的默认值
)
2 从自己的ini文件中读取信息
函数原型
DWORD GetPrivateProfileString(string lpszSection,string lpszKey,string lpszDefault, lpszReturnBuffer, cchReturnBuffer, lpszFile)
GetPrivateProfileString("DBInfo","IP","",IP.GetBuffer(MAX_PATH),MAX_PATH,iniFilePath);【测过】
CString IP, iniFilePath.
GetPrivateProfileString(Section name,key,"",key.GetBuffer(MAX_PATH),MAX_PATH,ini文件路径+文件名);
其中第一个参数为段名,第二个参数为参数名称,第三个参数为没找到key返回的默认值,第四个参数为指定一个字串缓冲区,第五个参数为指定装载到lpReturnedString缓冲区的最大字符数量,第六个参数为初始化文件的名字,如没有指定一个完整路径名,windows就在Windows目录中查找文件。
__inline DWORD GetPrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpDefault,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
)
DWORDGetPrivateProfileInt (string lpszSection,string lpszKey,long lpszDefault, lpszFile)为初始化文件中指定的条目获取一个整数值,参数列表跟上文取String一致,而第三个参数是如果找不到则返回一个默认的long类型的值。
特别注意的是 如果找到的数字不是一个合法的整数,函数会返回其中合法的一部分。比如“xyz=55zz”这个条目,函数返回55。
UINTGetPrivateProfileInt(
LPCTSTRlpAppName,
LPCTSTRlpKeyName,
INTnDefault,
LPCTSTRlpFileName
);
写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 // 要写入的文件的文件名。若该ini文件与程序在同一个目录下,也可使用相对
//路径,否则需要给出绝度路径。
)
如:
::WriteProfileString("Test","id","xym");
//在win.ini中创建一个Test节,并在该节中创建一个键id,其值为xym
::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini");
//在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym
//若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为:
::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");
需要注意的是,C系列的语言中,转义字符'\\'表示反斜线'\'。另外,当使用相对路径时,\\前的.号不能丢掉了。