您的位置:首页 > 其它

作为文件句柄的变量过短出现的文件操作错误

2017-02-16 10:53 148 查看
文件操作时,接收文件句柄的变量的长度一定要大于等于操作函数的返回变量的长度,否则容易导致文件读取出错。如下图那样的提示。



例如下面的代码:

short hFile = 0;
struct _finddata_t fileInfo;
string pathName;

if ((hFile = _findfirst(pathName.assign(path).append("\\*").c_str(),
&fileInfo)) == -1)
{
return;
}
do
{
if ((fileInfo.attrib & _A_SUBDIR))
{  // 保留文件夹
string strName = fileInfo.name;
if(strName!="."&&strName!="..")
dirName.push_back(fileInfo.name);
}
} while (_findnext(hFile, &fileInfo) == 0);
_findclose(hFile);


当程序运行到while(_findnext(hFile,&fileInfo)==0)后就会出错。因为_findfirst的返回类型是intptr_t,是8字节的整数类型,而short是2字节的整数,强行赋值会将文件句柄的低两个字节截取出来,如果原文件句柄的数值长度大于两个字节就会出错,小于两个字节就不会出错,所以这样的错误比较隐蔽,有时候会显现出来,有时候会运行通过。

下图是各整数类型的字节长度:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐