MFC写入.ini文件的策略

在使用WritePrivateProfileString的时候, 
如果前两个参数已经在INI文件中存在,那该函数的作用就是修改键值,即楼主说的覆盖 
如果第一个参数存在,第二个参数不存在,那作用是在INI中的一个字段(第一个参数)下新增一个键名(第二个参数),键值为第三个参数 
如果第一个参数也不存在,那作用是在INI中新增一个字段名(第一个参数),该字段下新增一个键名(第二个参数),键值为第三个参数 

//下面是在网上找的一个简单的介绍,比较容易看懂 
BOOL WritePrivateProfileString( 
LPCTSTR lpAppName, 
LPCTSTR lpKeyName, 
LPCTSTR lpString, 
LPCTSTR lpFileName 
); 

其中各参数的意义: 
LPCTSTR lpAppName 是INI文件中的一个字段名. 
LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名. 
LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的. 
LPCTSTR lpFileName 是完整的INI文件名. 

具体使用方法:设现有一名学生,需把他的姓名写入 c:studstudent.ini 文件中. 

C/C++ code
CString strName;strName="张三";::WritePrivateProfileString("StudentInfo","Name",strName,"c:\stud\student.ini"); //此时c:studstudent.ini文件中的内容如下://[StudentInfo]//  Name=张三

要是之前某个(Section,Key)对就已经有值了还不想覆盖原有的值而是追加该怎么做呢?可以先把原信息读出来,再和当前的合并(策略随便比如用逗号或者冒号分割)然后再存回就可以了。

配置文件中经常用到ini文件,在VC中其函数分别为: 写入.ini文件:

  1. BOOL WritePrivateProfileString(  
  2.   LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名   
  3.   
  4.   LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名   
  5.   
  6.   LPCTSTR lpString,   // 键值,也就是数据   
  7.   
  8.   LPCTSTR lpFileName  // INI文件的路径   
  9. );  
BOOL WritePrivateProfileString(
  LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名

  LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名

  LPCTSTR lpString,   // 键值,也就是数据

  LPCTSTR lpFileName  // INI文件的路径
);

读取.ini文件:

  1. DWORD GetPrivateProfileString(  
  2.   LPCTSTR lpAppName,        // INI文件中的一个字段名[节名]可以有很多个节名   
  3.   
  4.   LPCTSTR lpKeyName,        // lpAppName 下的一个键名,也就是里面具体的变量名   
  5.   
  6.   LPCTSTR lpDefault,        // 如果lpReturnedString为空,则把个变量赋给lpReturnedString   
  7.   
  8.   LPTSTR lpReturnedString,  // 存放键值的指针变量,用于接收INI文件中键值(数据)的接收缓冲区   
  9.   
  10.   DWORD nSize,            // lpReturnedString的缓冲区大小   
  11.   
  12.   LPCTSTR lpFileName        // INI文件的路径   
  13. );  
DWORD GetPrivateProfileString(
  LPCTSTR lpAppName,        // INI文件中的一个字段名[节名]可以有很多个节名

  LPCTSTR lpKeyName,        // lpAppName 下的一个键名,也就是里面具体的变量名

  LPCTSTR lpDefault,        // 如果lpReturnedString为空,则把个变量赋给lpReturnedString

  LPTSTR lpReturnedString,  // 存放键值的指针变量,用于接收INI文件中键值(数据)的接收缓冲区

  DWORD nSize,            // lpReturnedString的缓冲区大小

  LPCTSTR lpFileName        // INI文件的路径
);

读取整形值:(返回值为读到的整)

  1. UINT GetPrivateProfileInt(  
  2.   LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名   
  3.   LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名   
  4.   INT nDefault,       // 如果没有找到指定的数据返回,则把个变量值赋给返回值   
  5.   
  6.   LPCTSTR lpFileName  // INI文件的路径   
  7.   
  8. );  
UINT GetPrivateProfileInt(
  LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名
  LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名
  INT nDefault,       // 如果没有找到指定的数据返回,则把个变量值赋给返回值

  LPCTSTR lpFileName  // INI文件的路径

);

读写INI文件时相对路径和绝对路径都可以,根据实际情况选择

"..\IniFileName.ini"    // 这样的为相对路径

"D:\IniFileName.ini"    // 这样的为绝对路径

MAX_PATH:是微软最大路径占的字节所设的宏

例子:

写INI文件:

  1. LPTSTR lpPath = new char[MAX_PATH];  
  2.    
  3. strcpy(lpPath, "D:\IniFileName.ini");  
  4.   
  5. WritePrivateProfileString("LiMing""Sex""Man", lpPath);  
  6. WritePrivateProfileString("LiMing""Age""20", lpPath);  
  7.    
  8. WritePrivateProfileString("Fangfang""Sex""Woman", lpPath);  
  9. WritePrivateProfileString("Fangfang""Age""21", lpPath);  
  10.   
  11.    
  12.   
  13. delete [] lpPath;  
  14.   
  15.   
  16. INI文件如下:  
  17.   
  18. [LiMing]  
  19. Sex=Man  
  20. Age=20  
  21. [Fangfang]  
  22. Sex=Woman  
  23. Age=21  
  24.   
  25. 读INI文件:  
  26.   
  27.    
  28.   
  29. LPTSTR lpPath = new char[MAX_PATH];  
  30. LPTSTR LiMingSex = new char[6];  
  31. int LiMingAge;  
  32. LPTSTR FangfangSex = new char[6];  
  33. int FangfangAge;  
  34.    
  35.   
  36. strcpy(lpPath, "..\IniFileName.ini");  
  37.    
  38. GetPrivateProfileString("LiMing""Sex""", LiMingSex, 6, lpPath);  
  39. LiMingAge = GetPrivateProfileInt("LiMing""Age", 0, lpPath);  
  40.    
  41. GetPrivateProfileString("Fangfang""Sex""", FangfangSex, 6, lpPath);  
  42. FangfangAge = GetPrivateProfileInt("Fangfang""Age", 0, lpPath);  
  43.   
  44.    
  45.   
  46. delete [] lpPath;  
原文地址:https://www.cnblogs.com/a9999/p/3429407.html