返回首页

您好,

在我的应用程序,我想读两个从ini file.That值整数值的范围是-1到1023。我已经使用GetPrivateProfileString()读出的值的字符串转换为整数,使用_wtoi()
但是,如果我输入无效值像一些字符串值或空值,_wtoi返回值为零。这是一个有效的数字,在我的情况,但它不应该发生的。

所以,请告诉我,我是否可以指定任何范围,同时阅读_wtoi(ini文件或任何其他替代的价值)。

预先感谢...

回答

评论会员:sanoopdas 时间:2012/02/04
。最后,我决定写我自己的功能,将读取整数值从ini,并根据输入的验证如下所示


long ReadIntegerValueFromIni( const CString& csAppName_i,

                              const CString& csKeyName_i,

                              const CString& csDefaultVal_i,

                              const CString& csFileName_i,

                              const int nMinVal_i,

                              const int nMaxVal_i )

{

    long lKeyValue = 0;

    int nDefaultVal = _ttoi( csDefaultVal_i );

    try

    {

        const int SUCCESS_RET = 1;

        TCHAR tcszBuf[ MAX_PATH ];

        TCHAR tcszBufTemp[ MAX_PATH ];

        lKeyValue = nDefaultVal;

 

        // Read the value from INI file.

        GetPrivateProfileString( csAppName_i, csKeyName_i, csDefaultVal_i, tcszBuf, sizeof( tcszBuf ),

                                 csFileName_i );

        // Check whether the value read from ini is a valid numeric number or not.

        if( SUCCESS_RET != swscanf( tcszBuf, _T( "%d%s" ), &lKeyValue, &tcszBufTemp ))

        {

            lKeyValue = nDefaultVal;

            // Invalid value found so adjusted to Default Value.

        }

        // Check whether the value read from ini is within the allowed range or not.

        else if( nMinVal_i > lKeyValue || nMaxVal_i < lKeyValue )

        {

            lKeyValue = nDefaultVal;

            // Input value is not within the allowed range, so adjusted to Default Value

        }

        else

        {

            // Do nothing.

        }

    }

    catch( ... )

    {

        // Unhandled exception occured in ReadIntegerValueFromIni()

        lKeyValue = nDefaultVal;

    }

    return lKeyValue;

}


欢迎有效的意见是
评论会员:OriginalGriff 时间:2012/02/04
您不能指定对GetPrivbateProfileString任何限制 - 它返回发现什么,只能给出一个默认值(这可能是您的有效范围以外的)。但它仅适用于默认情况下,如果没有找到INI文件中定义的关键。

有没有做什么,你问_wtoi相当于 - 它返回0,如果函数失败

我建议你​​前处理返回的字符串,并检查自己的有效性
评论会员:CPallini 时间:2012/02/04
你可以改用]功能,提供了允许的范围内(如16384)默认值然后检查返回值
评论会员::理查德MacCutchan 时间:2012/02/04
。有没有做你想做的标准库函数,所以你应该写自己的转换例行检查非法字符和值

[编辑]另外,你可以使用{A}],以检查有效的字符,然后使用_wtoi()转换是否有效[/编辑]
评论会员:游客 时间:2012/02/04
|如果菲利普森:返回值是0然后检查,如果该字符串包含一个0这是一个有点简单,这样做的额外的检查是简单的代码