zoukankan      html  css  js  c++  java
  • 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;  
  • 相关阅读:
    AOP-面向切面编程-1
    记一次付工解决Sqlserver问题的过程
    Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)
    Mysql ---部署,创建用户
    【C++】C++未定义行为
    【C++】回看面向对象与C++
    【作业】2017级面向对象程序设计——总结作业
    【笔记】Cocos2dx学习笔记
    【个人】绝地求生—吃豆人
    【团队】汇总博客
  • 原文地址:https://www.cnblogs.com/a9999/p/3429407.html
Copyright © 2011-2022 走看看