不以物喜,不以己悲

C++ INI文件操作

C++ INI文件操作

INI文件结构:

由节名、键名、键值组成。形式如下:

[节名]

键名 = 键值

键名2 = 键值2

一个INI文件,可以有多个节

读写INI文件

  1. WritePrivateProfileString

    需要包含头文件#include<Windows.h>

    该函数用于向INI文件中写入一个字符串数据。

    函数原型:

    BOOL WritePrivateProfileString(
    	LPCTSTR lpAppName, //节名
        LPCTSTR lpKeyName, //键名
        LPCTSTR lpString, //键值
        LPCTSTR lpFileName, //保存的文件
    )
    
  2. GetPrivateProfileString

    该函数用于获取INI文件中的键值。

    函数原型:

    DWORD GetPrivateProfileString(
    	LPCTSTR lpAppName, //节名
        LPCTSTR lpKeyName, //键名
        LPCTSTR lpDefault, //默认值
        LPTSTR lpReturnedString, //读取的值
        DWORD nSize, //lpReturnedString缓冲区的大小
        LPCTSTR lpFileName, //INI文件名
    )
    

    返回值是字符复制到缓冲区的数量,不包括终止null字符。

  3. GetPrivateProfileInt

    该函数用于从INI文件中获取整型数据。

    该函数原型:

    UINT GetPrivateProfileInt(
    	LPCTSTR lpAppName,//节名
        LPCTSTR lpKeyName, //键名
        INT nDefault, //默认值
        LPCTSTR lpFileName,//INI文件名
    )
    

    函数返回实际读取的整数值

  4. GetPrivateProfileSectionNames

    该函数用于返回INI文件中的所有节名。

    函数原型:

    DWORD GetPrivateProfileSectionNames(
    	LPTSTR lpszReturnBuffer, //接收节名的数据缓冲区
        DWORD nSize, //缓冲区大小
        LPCTSTR lpFileName,//INI文件
    )
    

    返回值:

    返回值指定数量的字符复制到指定的缓冲,不包括终止null字符。

    如果缓冲区没有达到足以包含所有相关的部分名称指定的初始化文件,返回值等于指定的长度nSize - 2.

  5. GetPrivateProfileSection

    该函数用于获取指定节下的所有的键名和键值。

    函数原型:

    DWORD GetPrivateProfileSection(
    	LPCTSTR lpAppName, //节名
        LPTSTR lpReturnedString, //接收数据缓冲区
        DWORD nSize, //缓冲区大小
        LPCTSTR lpFileName, //INI文件
    )
    

    示例程序如下:

    #include<Windows.h>
    void Test()
    {
        LPCTSTR lpFileName = TEXT("D:\\wo.ini");
        //写入配置
        BOOL res = ::WritePrivateProfileString(TEXT("app"), TEXT("name"), TEXT("1"), lpFileName);
    
        //读配置
        WCHAR content[100];
        DWORD v = ::GetPrivateProfileString(TEXT("app"), TEXT("name"), TEXT(""), content, 100, lpFileName);
    
        //读数值
        DWORD resv = ::GetPrivateProfileInt(TEXT("app"), TEXT("name"), 0, lpFileName);
    
        //读取所有节名
       
        resv == ::GetPrivateProfileSectionNames(content, 100, lpFileName);
    
        //读取节下的所有键值
        resv = ::GetPrivateProfileSection(TEXT("app"), content, 100, lpFileName);
    
    }
    

    简易封装一下:

    #pragma once
    #include<Windows.h>
    
    class INIHelper
    {
    public:
    	INIHelper(LPCTSTR lpFileName)
    		:lpFileName(lpFileName)
    	{}
    	BOOL WriteKeyValue(LPCTSTR section, LPCTSTR key, LPCTSTR value)
    	{
    		return ::WritePrivateProfileString(section, key, value, this->lpFileName);
    	}
    	UINT ReadInt(LPCTSTR section, LPCTSTR key, int defaultvalue = 0)
    	{
    		return ::GetPrivateProfileInt(section, key, defaultvalue, this->lpFileName);
    	}
    	DWORD ReadSectionNames(LPWSTR buffer, int nsize)
    	{
    		return ::GetPrivateProfileSectionNames(buffer, nsize, this->lpFileName);
    	}
    	DWORD ReadSection(LPCTSTR section, LPWSTR buffer, int nsize)
    	{
    		return ::GetPrivateProfileSection(section, buffer, nsize, this->lpFileName);
    	}
    private:
    	LPCTSTR lpFileName;
    };
    
    
    
posted @ 2021-02-04 22:12  这种人  阅读(921)  评论(0编辑  收藏  举报