zoukankan      html  css  js  c++  java
  • C++读取ini文件的类

    取自:http://www.viksoe.dk/code/all_mfc.htm,里面有各种MFC常用的类

    // Ini.h: interface for the CIni class.
    //
    // Written by Bjarke Viksoe (bjarke@viksoe.dk)
    // 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 );
    };
  • 相关阅读:
    CF710F String Set Queries(AC自动机+二进制分组)
    P5231 [JSOI2012]玄武密码(AC自动机)
    AC自动机基础&应用
    [SDOI2011]计算器(快速幂,线性同余方程,BSGS)
    数论——欧拉定理和费马小定理
    AtCoder Beginner Contest 173 题解
    【CSP2019】树的重心(树的重心、倍增、换根)
    CF708C Centroids(换根dp,树的重心)
    凸包(Graham与Andrew算法求凸包)
    [USACO10MAR]Great Cow Gathering G(换根dp)
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3619006.html
Copyright © 2011-2022 走看看