• VC++ 实现INI文件读写操作


    转载:https://blog.csdn.net/fan380485838/article/details/73188420

    在实际项目开发中,会用ini配置文件,在此总结一下对ini读写操作

    一:读ini配置文件

    DWORD GetPrivateProfileString(
    LPCTSTR lpAppName, 
    LPCTSTR lpKeyName, 
    LPCTSTR lpDefault, 
    LPTSTR lpReturnedString, 
    DWORD nSize, 
    LPCTSTR lpFileName 
    );
       其中各参数的意义: 
       lpAppName 根节点name.
             lpKeyName  子节点name
       lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量. 
       lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.
       nSize : 目的缓存器的大小.
       lpFileName : 是完整的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文件名.

    完整代码:

    #include <iostream>
    #include <atlstr.h>
    using namespace std;
    
    void ReadIniFile(LPCWSTR lpFilePath)
    {
        CString strClass, strName, strAge, strSex, strGrade;
    
        //读ini配置文件
        ::GetPrivateProfileString(_T("StudentInfo"), _T("Class"), _T(""), strClass.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath);
        ::GetPrivateProfileString(_T("StudentInfo"), _T("Name"), _T(""), strName.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath);
        ::GetPrivateProfileString(_T("StudentInfo"), _T("Age"), _T(""), strAge.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath);//以字符串形式读取
        int age = ::GetPrivateProfileInt(_T("StudentInfo"), _T("Age"), 0, lpFilePath);//返回值是value
        ::GetPrivateProfileString(_T("StudentInfo"), _T("Sex"), _T(""), strSex.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath);
        ::GetPrivateProfileString(_T("StudentInfo"), _T("Grade"), _T(""), strGrade.GetBuffer(MAX_PATH), MAX_PATH, lpFilePath);
    }
    
    void WriteIniFile(LPCWSTR lpFilePath)
    {
        CString strClub, strPlayer, strNation, strAge, strGrade;
        strClub = "Barcelona";
        strPlayer = "Messi";
        strNation = "Argentina";
        strAge = "31";
        strGrade = "superstar";
    
        ::WritePrivateProfileString(_T("Team"), _T("Club"), strClub, lpFilePath);
        ::WritePrivateProfileString(_T("Team"), _T("player"), strPlayer, lpFilePath);
        ::WritePrivateProfileString(_T("Team"), _T("nationality"), strNation, lpFilePath);
        ::WritePrivateProfileString(_T("Team"), _T("Age"), strAge, lpFilePath);
        ::WritePrivateProfileString(_T("Team"), _T("Grade"), strGrade, lpFilePath);
    
    }
    
    int main()
    {
    
        wchar_t szFileFullPath[MAX_PATH];
        ::GetModuleFileName(NULL, szFileFullPath, MAX_PATH);//获取文件路径  
        wstring strPath = szFileFullPath;
        strPath = strPath.substr(0, strPath.rfind('\') + 1);
        strPath += L"demo.ini";
    
        
    
        //写ini配置文件
        //WriteIniFile(strPath.c_str());
    
        //读ini配置文件
        ReadIniFile(strPath.c_str());
        return 0;
    }

    三:配置文件格式:

    [StudentInfo]
    Class=11
    Name=tom
    Age=18
    Sex=男
    Grade=优秀
    [Team]
    Club=Barcelona
    player=Messi
    nationality=Argentina
    Age=31
    Grade=superstar

    四:如下需要注意下:
       1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.
       2.文件名的路径中必须为 \ ,因为在VC++中, \ 才表示一个 .
       3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".\demo.ini".
               4:如果配置文件中有中文字符,需要修改下配置文件的格式。例如将配置文件重新命名为ASCII码格式。

  • 相关阅读:
    Unity游戏开发之AR增强现实技术入门
    python3快速入门
    大数据Hadoop入门到精通 (精品课程)
    JavaScript基础训练营
    我的超级工具
    html5 postMessage 实现类似 sendMessage 的同步效果,支持跨域
    Centos7-驱动小米WIFI做AP
    rz快速上传文件到ssh服务器
    Ansible批量修改root密码
    ArcGIS API for JavaScript 入门教程[0] 目录
  • 原文地址:https://www.cnblogs.com/chechen/p/10266049.html
Copyright © 2020-2023  润新知