天天看點

Linux C++讀取配置檔案

bool LoadConfFile()
{
    char buffer[ 256 ];
    char strConfFilePath[] = "../server.conf";
    if( access( strConfFilePath, F_OK ) != 0 )
    {
        memset( buffer, 0, sizeof( buffer ) );
        sprintf( buffer, "Error: config file not exist! Using default rtdbIP and rtdbPort!" );
        printf( "%s\n", buffer );
        CLogger::GetInstance()->AddLog( buffer, strlen( buffer ) );
        return false;
    }

    //open config file
    fstream fs;
    fs.open( strConfFilePath );
    if( !fs.is_open() )
    {
        memset( buffer, 0, sizeof( buffer ) );
        sprintf( buffer, "Error: open config file failed! filePath=%s", strConfFilePath );
        printf( "%s\n", buffer );
        CLogger::GetInstance()->AddLog( buffer, strlen( buffer ) );
        return false;
    }

    //read config file
    bool bFindIP = false;
    bool bFindPort = false;
    while( !fs.eof() )
    {
        memset( buffer, 0, sizeof( buffer ) );
        fs.getline( buffer, sizeof( buffer ) );

//        printf( "%s\n", buffer );

        string strLine( buffer );
        remove( strLine.begin(), strLine.end(), ' ' );//remove blank space

        size_t nPos = strLine.find( "=" );
        if( nPos == string::npos ) //not find
            continue;

        string strKey = strLine.substr( 0, nPos );
        string strValue = strLine.substr( nPos+1 );

        if( strKey == "rtdbIP" )
        {
            m_strRtdbServerIP = strValue;
            bFindIP = true;
        }
        else if( strKey == "rtdbPort" )
        {
            m_nRtdbServerPort = atoi( strValue.c_str() );
            bFindPort = true;
        }
    }

    if( !bFindIP )
    {
        memset( buffer, 0, sizeof( buffer ) );
        sprintf( buffer, "Error: cannot find rtdbIP in config file! filePath=%s", strConfFilePath );
        printf( "%s\n", buffer );
        CLogger::GetInstance()->AddLog( buffer, strlen( buffer ) );
        return false;
    }

    if( !bFindPort )
    {
        memset( buffer, 0, sizeof( buffer ) );
        sprintf( buffer, "Error: cannot find rtdbPort in config file! filePath=%s", strConfFilePath );
        printf( "%s\n", buffer );
        CLogger::GetInstance()->AddLog( buffer, strlen( buffer ) );
        return false;
    }

    return true;
}
      

繼續閱讀