读取配置文件

时间:2012-10-08 09:35:02

标签: c++

我正在尝试读取这样的配置文件:

rawfile=input.raw
encfile=encoded.enc
decfile=decoded.raw
width=512
height=512
rle=1
quantfile=matrix.txt 
logfile=log.txt

有这个功能:

void Compression::readConfigFile(char * input)
{
    string lineBuf;
    string optionBuf;
    std::ifstream confFile(input);

    if ( confFile.is_open() )
    {
        while ( getline( confFile, lineBuf ) )
        {
            optionBuf = "rawfile=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->rawfile = lineBuf.c_str();
            }
            optionBuf = "encfile=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->encfile = lineBuf.c_str();
            }
            optionBuf = "decfile=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->encfile = lineBuf.c_str();
            }
            optionBuf = "width=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->width = atoi( lineBuf.c_str() );
            }
            optionBuf = "height=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->height = atoi( lineBuf.c_str() );
            }
            optionBuf = "rle=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->rle = atoi( lineBuf.c_str() );
            }
            optionBuf = "quantfile=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length());
                this->matrix = lineBuf.c_str();
            }
            optionBuf = "logfile=";
            if ( ( ( int )lineBuf.find(optionBuf) ) != -1 )
            {
                lineBuf.erase( 0, optionBuf.length() );
                this->logfile = lineBuf.c_str();
            }
            confFile.close();

        }
    }
    else
        cout << "Can't open file: " << input << endl;
}

但它不起作用。我的整数是0或一些大数字。我的琴弦仍然是空的。

有人能帮助我吗?

亲切的问候,

1 个答案:

答案 0 :(得分:3)

你不应该在while循环之外关闭文件吗?

while() {
    ...
}
confFile.close();