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 );
    };
  • 相关阅读:
    【Docker】-NO.131.Docker.1 -【Docker】
    【HBase】-NO.140.HBase.1 -【HBase】
    【Vagrant】-NO.130.Vagrant.1 -【Vagrant】
    【技巧】-NO.123.数据处理技巧
    【Common】-NO.122.common.1
    【心得】-NO.114.面试.1 -【To HR And Interviewer】
    【JVM】-NO.113.JVM.1 -【JDK11 HashMap详解-4-resize()】
    【JVM】-NO.114.JVM.1 -【JDK11 HashMap详解-3-put-treeifyBin()-AVL】
    【JVM】-NO.115.JVM.1 -【JDK11 HashMap详解-4-伸展树、B树】
    【JVM】-NO.116.JVM.1 -【JDK11 HashMap详解-5-红黑树】
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3619006.html
Copyright © 2011-2022 走看看