VC读写ini文件

时间:2022-09-04 18:37:26

VC读写ini文件

关于ini文件读写的API函数 有下列这些:

GetPrivateProfileInt 
GetPrivateProfileSection 
GetPrivateProfileSectionNames 
GetPrivateProfileString 
GetPrivateProfileStruct 
GetProfileInt 
GetProfileSection 
GetProfileString 
WritePrivateProfileSection 
WritePrivateProfileString 
WritePrivateProfileStruct 
WriteProfileSection 
WriteProfileString
注:关于这些函数的详细解释请参考MSDN

为更好的了解ini文件的操作,下面给出一个实例,希望能起到抛砖引玉的作用:

#if !defined AFX_INI_HEAR_H
#define AFX_INI_HEAR_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*
 *  ver 1.0.0.0
 *   读写ini文件的内容
 *   johnchen
 */
#define  MAX_KEYS 1024
#include "afxtempl.h"
class CIni
{
public:
 CIni();
 ~CIni();
 void SetIniPathName(CString strFileName);
    void GetValueByKey(CString strAppName,CString strKey,CString & strValue);
 void SetValueByKey(CString strAppName,CString strKey,CString strValue);
 int GetValueByAppName(CList<int,int> & listKey,CList<CString,CString&> & listValue,CString strAppName="sealremarktype"); // 根据字段得到所有键值
private:
 CString m_strIniPathName;
};

#endif

#include <stdafx.h>
#include "ini.h"

CIni::CIni()
{
 CString strBuffer;
 char szBuffer[MAX_PATH];
 memset(szBuffer,0,MAX_PATH);
 ::GetCurrentDirectory(MAX_PATH,(LPSTR)strBuffer.GetBuffer(MAX_PATH));
    strcpy(szBuffer,(char *)strBuffer.GetBuffer(MAX_PATH));
 strcat(szBuffer,"//sealremark.ini");
    m_strIniPathName = szBuffer;
}

CIni::~CIni()
{
   
}

// 设置ini文件路径
void CIni::SetIniPathName(CString strFileName)
{
    m_strIniPathName = strFileName;
}

// 得到键值
void CIni::GetValueByKey(CString strAppName,CString strKey,CString & strValue)
{
 GetPrivateProfileString(strAppName.GetBuffer(strAppName.GetLength()),strKey.GetBuffer(strKey.GetLength()),"公章",strValue.GetBuffer(MAX_PATH),MAX_PATH,m_strIniPathName);
}

// 设定键值
void CIni::SetValueByKey(CString strAppName,CString strKey,CString strValue)
{
    ::WritePrivateProfileString(strAppName.GetBuffer(strAppName.GetLength()),strKey.GetBuffer(strKey.GetLength()),strValue.GetBuffer(strValue.GetLength()),m_strIniPathName);
}

// 函数功能:根据字段得到所有键值
// 参数说明:
// listKey 键
// listValue 值
// strAppName 字段
// 返回值:int 键值数量
int CIni::GetValueByAppName(CList<int,int> & listKey,CList<CString,CString&> & listValue,CString strAppName)
{
 TCHAR charKeyName[MAX_KEYS];
 memset(charKeyName,0,sizeof(TCHAR)*MAX_KEYS);
 int iNum = 0; // 键值总数
 DWORD dw = GetPrivateProfileSection(strAppName.GetBuffer(strAppName.GetLength()),charKeyName,MAX_KEYS,m_strIniPathName);
 if(dw==0)  // 没有记录
 {
  return iNum;
 }
 for(int i=0;i<MAX_KEYS;i++)
 {
  if(charKeyName[i]==0)
  {
   iNum++;
   if(charKeyName[i]==charKeyName[i+1])
    break;
  }
 }
 int iCount = iNum,iPos = 0,iOldPos=0,j=0;
 TCHAR szKey[128],szValue[128];
 CString strTemp = "";

 for(i=0;i<=dw;i++)
    {
  if(charKeyName[i]==0)
  {
   iCount--;
   iPos = i;
   memset(szKey,0,128*sizeof(TCHAR));
   memset(szValue,0,128*sizeof(TCHAR));
   for(j=iOldPos;j<iPos;j++)
   {
    if(charKeyName[j]=='=')
    {
     memcpy(szKey,&charKeyName[iOldPos],j-iOldPos);
     memcpy(szValue,&charKeyName[j+1],iPos-j-1);
     listKey.AddTail((int)atoi(szKey));
     strTemp = szValue;
     listValue.AddTail(strTemp);
     iOldPos = iPos+1;
     break;
    }
   }
  }
    }
 
 return iNum;
}