MFC资料读写之ini文件

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系列的语言中,转义字符'\\'表示反斜线'\'。另外,当使用相对路径时,\\前的.号不能丢掉了。