C++ini 파일 을 읽 는 클래스

추출:http://www.viksoe.dk/code/all_mfc.htm,각종 MFC 에서 자주 사용 하 는 클래스 가 있 습 니 다.
// Ini.h: interface for the CIni class.
//
// Written by Bjarke Viksoe ([email protected])
// Copyright (c) 2000.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed by any means PROVIDING it is 
// not sold for profit without the authors written consent, and 
// providing that this notice and the authors name is included. 
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability if it causes any damage to you or your
// computer whatsoever. It's free, so don't hassle me about it.
//
// Beware of bugs.


#if !defined(AFX_INI_H__2478E9E2_E904_11D1_93C1_241C08C10000__INCLUDED_)
#define AFX_INI_H__2478E9E2_E904_11D1_93C1_241C08C10000__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
//
// INI file class
//
// Author:
// Bjarke Viks 
// Description:
// Implements helper functions to access
// an .INI configuration file using
// conventional CString operations
//

// Ini-file wrapper class
class CIni : public CObject  
{
public:
   CIni();
   CIni( LPCTSTR IniFilename );
   virtual ~CIni();

// Methods
public:
   // Sets the current Ini-file to use.
   RETCODE SetIniFilename(LPCTSTR IniFilename);
   //
   // Reads an integer from the ini-file.
   UINT GetInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault=0);
   // Reads a boolean value from the ini-file.
   BOOL GetBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bDefault=FALSE);
   // Reads a string from the ini-file.
   CString GetString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault=NULL);
   // Reads a binaryt lump of data from the ini-file.
   BOOL GetBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, BYTE** ppData, UINT* pBytes);
   //
   // Writes an integer to the ini-file.
   BOOL WriteInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue);
   // Writes a boolean value to the ini-file.
   BOOL WriteBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bValue);
   // Writes a string to the ini-file.
   BOOL WriteString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue);
   // Writes a binary lump of data to the ini-file.
   BOOL WriteBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPBYTE pData, UINT nBytes);
   // Writes an 'expand string' to the ini-file.
   BOOL WriteExpandString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue);
   //
   // Removes an item from the current ini-file.
   BOOL DeleteKey(LPCTSTR lpszSection, LPCTSTR lpszEntry);
   // Removes a complete section from the ini-file.
   BOOL DeleteSection(LPCTSTR lpszSection);

// Variables
protected:
   CString m_IniFilename; // The current ini-file used.
};

#endif // !defined(AFX_INI_H__2478E9E2_E904_11D1_93C1_241C08C10000__INCLUDED_)

Ini.cpp
// Ini.cpp: implementation of the CIni class.
// Author: Bjarke Viks 
//
// Description:
// Thin wrapper around the Win32 Windows Profile (Ini-file configuration)
// interface.
//
//

#include "stdafx.h"
#include "Ini.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//
// Construction/Destruction
//

CIni::CIni()
{
   m_IniFilename.Empty();
}

CIni::CIni(LPCTSTR IniFilename)
{
   SetIniFilename( IniFilename );
}

CIni::~CIni()
{
   // Flush .ini file
   // (This should perhaps not be here. We risk to slow
   //  down the system and this would be done at a more appropriate
   //  time by the OS scheduler anyway)
   ::WritePrivateProfileString( NULL, NULL, NULL, m_IniFilename );
}


//
// Methods
//

#define MAX_INI_BUFFER 300   // Defines the maximum number of chars we can
                             // read from the ini file 

RETCODE CIni::SetIniFilename(LPCTSTR IniFilename)
{
   ASSERT(AfxIsValidString(IniFilename));
   m_IniFilename = IniFilename;
   if( m_IniFilename.IsEmpty() ) return RET_INVALIDARGS;
   return RET_OK;
};


UINT CIni::GetInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   if( m_IniFilename.IsEmpty() ) return 0; // error
   CString sDefault;
   sDefault.Format( _T("%d"), nDefault );
   CString s = GetString( lpszSection, lpszEntry, sDefault );
   return _ttol( s );
};

CString CIni::GetString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   if( m_IniFilename.IsEmpty() ) return CString();
   CString s;
   long ret = ::GetPrivateProfileString( lpszSection, lpszEntry, lpszDefault, s.GetBuffer( MAX_INI_BUFFER ), MAX_INI_BUFFER, m_IniFilename );
   s.ReleaseBuffer();
   if( ret==0 ) return CString(lpszDefault);
   return s;
};

BOOL CIni::GetBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bDefault)
{
   CString s = GetString(lpszSection,lpszEntry);
   if( s.IsEmpty() ) return bDefault;
   TCHAR c = _totupper( s[0] );
   switch( c ) {
   case _T('Y'): // YES
   case _T('1'): // 1 (binary)
   case _T('O'): // OK
      return TRUE;
   default:
      return FALSE;
   };
};

BOOL CIni::GetBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, BYTE** ppData, UINT* pBytes)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   return FALSE;
};

BOOL CIni::WriteInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   CString s;
   s.Format( _T("%d"), nValue );
   return WriteString( lpszSection, lpszEntry, s );
};

BOOL CIni::WriteBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bValue)
{
   CString s;
   bValue ? s=_T("Y") : s=_T("N");
   return WriteString( lpszSection, lpszEntry, s );
};

BOOL CIni::WriteString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   if( m_IniFilename.IsEmpty() ) return RET_NOTINITIALIZED;
   return ::WritePrivateProfileString( lpszSection, lpszEntry, lpszValue, m_IniFilename );
};

BOOL CIni::WriteBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPBYTE pData, UINT nBytes)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   return FALSE;
};

BOOL CIni::WriteExpandString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   return FALSE;
};

BOOL CIni::DeleteKey(LPCTSTR lpszSection, LPCTSTR lpszEntry)
{
   ASSERT(AfxIsValidString(lpszSection));
   ASSERT(AfxIsValidString(lpszEntry));
   if( m_IniFilename.IsEmpty() ) return RET_NOTINITIALIZED;
   return ::WritePrivateProfileString( lpszSection, lpszEntry, NULL, m_IniFilename );
};

BOOL CIni::DeleteSection(LPCTSTR lpszSection)
{
   ASSERT(AfxIsValidString(lpszSection));
   if( m_IniFilename.IsEmpty() ) return RET_NOTINITIALIZED;
   return ::WritePrivateProfileString( lpszSection, NULL, NULL, m_IniFilename );
};

좋은 웹페이지 즐겨찾기