作为文件句柄的变量过短出现的文件操作错误
2017-02-16 10:53
148 查看
文件操作时,接收文件句柄的变量的长度一定要大于等于操作函数的返回变量的长度,否则容易导致文件读取出错。如下图那样的提示。
例如下面的代码:
当程序运行到while(_findnext(hFile,&fileInfo)==0)后就会出错。因为_findfirst的返回类型是intptr_t,是8字节的整数类型,而short是2字节的整数,强行赋值会将文件句柄的低两个字节截取出来,如果原文件句柄的数值长度大于两个字节就会出错,小于两个字节就不会出错,所以这样的错误比较隐蔽,有时候会显现出来,有时候会运行通过。
下图是各整数类型的字节长度:
例如下面的代码:
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字节的整数,强行赋值会将文件句柄的低两个字节截取出来,如果原文件句柄的数值长度大于两个字节就会出错,小于两个字节就不会出错,所以这样的错误比较隐蔽,有时候会显现出来,有时候会运行通过。
下图是各整数类型的字节长度:
相关文章推荐
- 在GHOST的WINXPSP2安装SQL SERVER2000个人版时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装之前,必须重新启动计算机。”错误的解决方法
- 头文件中定义全局变量出现重定义错误的解决方案
- asp.net 操作 excel 出现 class 组件错误 或 打开文件错误
- 解决jdk环境变量设置完后,在cmd中运行javac出现’javac‘不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示
- 两个cpp文件调用同一个h文件,出现全局变量多次定义错误!
- 在GHOST的WINXPSP2安装SQL SERVER2000个人版时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装之前,必须重新启动计算机。”错误的解决方法
- 在安装sql server时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。
- SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作……错误:3219……”的解决方法
- ASP上传大文件出现”不允许操作”的错误
- Sharepoint Designer 中出现“无法执行此操作。该文件不再为签出状态,或已被删除”的错误
- 安装SQL Server 2000时出现以下错误提示:“以前的某个程序安装已在安装计算机创建挂起的文件操作,运行安装程序之前必须重新启动计算机” 说明:如果重启计算机无法解决问题,可能有以下两个原因
- 在GHOST的WINXPSP2安装SQL SERVER2000个人版时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装之前,必须重新启动计算机。”错误的解决方法
- VS编译出现将元数据写入文件“x:/x/obj/Debug/xx.exe”时发生错误 --“存储空间不足,无法完成此操作。 ”
- SQL Server安装过程中出现“以前的某个安装程序已在安装计算机上创建挂起的文件操作,运行程序前必须重启计算机”错误的解决方法
- 在GHOST的WINXPSP2安装SQL SERVER2000个人版时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装之前,必须重新启动计算机。”错误的解决方法
- 安装Sqlserver时出现“以前某个程序安装时挂起了文件操作,安装程序前请重启”的错误
- SQL安装时出现"挂起的文件操作”错误解决办法
- SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作……错误:3219……”的解决方法
- SQL Server 2000升级sp4补丁的时候出现“以前进行的程序安装创建了挂起的文件操作”的错误!
- 安装sql server时出现 “以前进行的程序安装创建了挂起的文件操作。运行安装程序之前,必须重新启动计算机” 这种错误的解决办法