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

    遍历文件夹下的特定文件,所有人都推荐使用 _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;
}

 

 

后记

看完这些,希望你已经没有想看更深层头文件的源码的冲动了。
如果是这样的话,不妨点个赞吧。

 

为何要点赞?

如果本文解决了你的困惑,不妨点个赞鼓励一下。
不管你信不信,也不管你同不同意,实际上,你的每一次点赞都标志着你自身的进步。而打赏乃是点赞的高级形式
曾经有无数个点赞的机会,但是我都没有好好珍惜,假如时光可以倒流,我一定为他们也为自己点赞。

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值