dos 下遍历文件目录
来源:互联网 发布:js杀破狼歌曲下载 编辑:程序博客网 时间:2024/06/05 12:50
首先先看两个函数
函数名: findfirst, findnext
功 能: 搜索磁盘目录; 取得下一个匹配的findfirst模式的文件
用 法: int findfirst(char *pathname, struct ffblk *ffblk, int attrib);
int findnext(struct ffblk *ffblk);
程序例:
/* findnext example */
#include <stdio.h>
#include <dir.h>
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 );
continuestrcpy(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")就好了,呵呵.
函数名: findfirst, findnext
功 能: 搜索磁盘目录; 取得下一个匹配的findfirst模式的文件
用 法: int findfirst(char *pathname, struct ffblk *ffblk, int attrib);
int findnext(struct ffblk *ffblk);
程序例:
/* findnext example */
#include <stdio.h>
#include <dir.h>
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 );
continuestrcpy(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")就好了,呵呵.
- dos 下遍历文件目录
- dos遍历目录文件
- DOS用C语言下对文件目录的遍历
- dos下遍历目录和文件
- windows dos 脚本 遍历目录 每个文件
- 遍历目录下所有文件
- 遍历目录下的文件
- Windows下遍历文件目录
- 遍历目录下的文件
- 遍历目录下的文件
- 遍历目录下所有文件
- 遍历目录,获取目录下的文件
- dos下遍历目录和文件的代码
- 遍历目录下的所有文件
- [积累]遍历目录下的全部文件
- MFC 遍历目录下的文件
- windows遍历目录下所有文件
- java 遍历目录下的文件
- 千万级的mysql数据库与优化方法
- ActiveMQ队列特性:删除不活动的队列(Delete Inactive Destinations)
- poj 1060解题报告
- 使用Graphics\pen\brush\color\Font\等类和对应的方法属性
- SPARQL 简介
- dos 下遍历文件目录
- JDK自带的native2ascii工具完全揭密
- 添加登陆界面,增加验证码功能。
- 添加登陆界面,增加验证码功能。
- 使用SQLiteOpenHelper获取用于操作数据库的SQLiteDatabase实例
- 模板函数
- 使用事务操作SQLite数据库
- linux windows 的后缀之别
- 使用ContentProvider共享数据