解决使用findnext相关函数在64位编译环境下遍历文件夹下的文件

来源:互联网 发布:淘宝店铺如何开 编辑:程序博客网 时间:2024/05/29 02:49

遍历文件夹下的特定文件,所有人都推荐使用 _findfirst 还有 _findnext来进行操作,不是很难,但是我的项目必须要在64位环境下编译,x64环境下编译的话, _findfirst 还有 _findnext 则不能使用,会报错。

在微软的网站上看到这样一些定义,觉得解决有望:
long _findfirst( char *filespec, struct _finddata_t *fileinfo );__int64 _findfirsti64( char *filespec, struct _finddata_t *fileinfo );

以为改一下函数名字就ok,谁知道fileinfo又会报错,开始的时候这部分我是无法理解的,形参都一样的,不应该报错,后来我又继续查找资料,得到了这些:

int _findnext32(   intptr_t handle,   struct _finddata32_t *fileinfo );int _findnext64(   intptr_t handle,   struct __finddata64_t *fileinfo );

啊啊,原来是fileinfo的类型也有所变化,同时相关的文件的句柄的类型也要有所变化,和64位相匹配,
我用的_int64 Handle;来申请的。
下面我复制我的一段代码,重点看一下其中 Handle、FileInfo两个变量的类型,还有_findfirst64、_findnext64两个函数的不同,其他部分与网上通用的,不区分32位和64位的函数一样使用:

//这段代码是VS2013环境下使用C++编程
//打印出目录下的所有后缀为jpg的文件名字,并统计图片数量

#include<io.h>#include<stdio.h>int main(){__int64  Handle;long jpg_num=0;struct __finddata64_t  FileInfo;if ((Handle = _findfirst64("D:\\picture\\*.jpg", &FileInfo)) == -1L)printf("没有找到匹配的项目\n");else{printf("%s\n", FileInfo.name);while (_findnext64(Handle, &FileInfo) == 0){jpg_num++;  printf("%s\n", FileInfo.name);}_findclose(Handle);}printf("%d\n", jpg_num);getchar();return 0;}
0 0
原创粉丝点击