c语言全盘搜索指定文件的实例代码_C语言教程-查字典教程网
c语言全盘搜索指定文件的实例代码
c语言全盘搜索指定文件的实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#include#includevoidFindFile(char*,char*);intcount=0;//统计文件数c...

复制代码 代码如下:

#include<stdio.h>

#include<windows.h>

void FindFile(char* ,char* );

int count=0;//统计文件数

char fname[32];

#define BUFSIZE 256

int main(int argc,char* argv[])

{

char szLogicalDriveStrings[BUFSIZE];

DWORD iLength;

int iSub;

printf("请输入要搜索的文件名:");

scanf("%s",fname);

ZeroMemory(szLogicalDriveStrings, BUFSIZE);

iLength = GetLogicalDriveStringsA(BUFSIZE-1, szLogicalDriveStrings);

for(iSub=0; iSub<iLength; iSub+=4)

{

//如果不是固定磁盘驱动器:本地硬盘或移动硬盘,忽略

if(GetDriveType(szLogicalDriveStrings+iSub)!=3)

continue;

FindFile(szLogicalDriveStrings+iSub,"*.*");

}

printf("一共发现%d个文件...n",count);

scanf("%*d");

return 0;

}

void FindFile(char* pfilename,char* pfilter)

{

WIN32_FIND_DATA findfiledate;

HANDLE hfind;

char filename[512];

char lpFileName[512];

char _lpFileName[512];

int i;

int result;

for(i=0;*(pfilename+i)!='';i++)

filename[i]=*(pfilename+i);

filename[i]='';

//如果最后一个字符不是''

if(filename[strlen(filename)-1]!='')

strcat(filename,""); //添加''

strcpy(lpFileName,filename);

strcat(lpFileName,pfilter);

hfind=FindFirstFile(lpFileName,&findfiledate);

if(hfind==INVALID_HANDLE_VALUE)

return;

do

{

//如果不是目录

if(!(findfiledate.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))

{

//如果找到指定文件

if(0==strcmp(fname,findfiledate.cFileName))

{

printf("%s%sn",filename,findfiledate.cFileName);

count++;

}

}

//如果是目录

else

{

//.和..不输出

if(findfiledate.cFileName[0]!='.')

{

strcpy(_lpFileName,filename);

strcat(_lpFileName,findfiledate.cFileName);

FindFile(_lpFileName,pfilter); //递归

}

}

}while(FindNextFile(hfind,&findfiledate));//FindNextFile返回为真,继续搜索

FindClose(hfind);

return;

}

使用递归来搜索文件,效率低,使用多线程效果更好。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C语言学习
    热门C语言学习
    编程开发子分类