赞助

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码格式。

posted @ 2019-01-14 11:53  车臣  阅读(1629)  评论(1编辑  收藏  举报