c语言定位文件夹dos,如何dos 下遍历文件目录

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

首先先看两个函数

函数名: findfirst, findnext

功  能: 搜索磁盘目录; 取得下一个匹配的findfirst模式的文件

用  法: int findfirst(char *pathname, struct ffblk *ffblk, int attrib);

int findnext(struct ffblk *ffblk);

程序例:

/* findnext example */

#include 

#include 

int main(void)

{

struct ffblk ffblk;

int done;

printf("Directory listing of *.* ");

done = findfirst("*.*",&ffblk,0);

while (!done)

{

printf("  %s ", ffblk.ff_name);

done = findnext(&ffblk);

}

return 0;

}

其中ffblk是一个结构体,其内容为:

struct    ffblk    ...{

char        ff_reserved[21];

char        ff_attrib;

unsigned    ff_ftime;

unsigned    ff_fdate;

long        ff_fsize;

char        ff_name[13];

};

ff_attrib有以下几种形式,可以做为findfirst的参数:

#define WILDCARDS 0x01

#define EXTENSION  0x02

#define FILENAME     0x04

#define DIRECTORY  0x08

#define DRIVE            0x10

若要遍历目录,findfirst的第三个参数应该为 0x10,则在ffblk中的ff_attrib会返回相应的属性.

void GetDirMd5(char* filePath)

{

struct ffblk fileInfo;

int done;

char filePathCpy[MAX_PATH];

char fullPath[MAX_PATH];

int tag = 0;

strcpy(filePathCpy, filePath);

done = findfirst(filePathCpy, &fileInfo, 0x10);

if(done)

{

printf("Directory not exit!\n");

return;

}

while(tag != -1 )

{

if(fileInfo.ff_attrib == 0x10) /* is a directory */

{

if( !strcmp(fileInfo.ff_name, "." ) || !strcmp(fileInfo.ff_name, ".."))

{

tag = findnext(&fileInfo );

continue;

}

strcpy(fullPath, filePathCpy);

fullPath[strlen( fullPath ) - strlen("*.*")] = '\0';

strcat(fullPath, fileInfo.ff_name);

strcat(fullPath, "\\*.*");

GetDirMd5(fullPath);

}

else /* is a file */

{

strcpy(fullPath, filePath);

fullPath[strlen(fullPath) - strlen("*.*")] = '\0';

strcat(fullPath, fileInfo.ff_name);

printf("%s", fullPath);

iFileNum += 1;

}

tag = findnext(&fileInfo);

}

}

注:粘代码时代码是有'\0'竟然粘不了!!

比如你遍历一下C盘下的Test目录,只需要GetDirMd5("C:\\Test\\*.8")就好了,呵呵�

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值