MFC文件读写之ini文件
什么是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
? ? )
?
?
DWORD?GetPrivateProfileInt(string lpszSection,string?lpszKey,long?lpszDefault, lpszFile)?为初始化文件中指定的条目获取一个整数值,参数列表跟上文取String一致,而第三个参数是如果找不到则返回一个默认的long类型的值。
特别注意的是 如果找到的数字不是一个合法的整数,函数会返回其中合法的一部分。比如“xyz=55zz”这个条目,函数返回55。
UINT ??GetPrivateProfileInt( ?
??LPCTSTR ??lpAppName, ???
??LPCTSTR ??lpKeyName, ???
??INT ??nDefault, ???
??LPCTSTR ??lpFileName????
??);
?
?
写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系列的语言中,转义字符'\\'表示反斜线'\'。另外,当使用相对路径时,\\前的.号不能丢掉了。
?
?