小鱼儿 遍历指点目录下的所有目录中的文件 +扫描当前目录所有文件
因为自己发现文件操作,很多时候都会扫描当前文档。 或者扫描子目录。这个以前就写过,今天自己好好的重写了一面,也写了注释。
用了几个API 而已
FindFirstFile 和 FindNextFile 其实c语言里面也有这个函数。
下面是遍历指点目录的所有文件指定类型文件 包括子目录。
如果想要变量全盘也好写。
只要
for(char i='c';i<'z';i++)
{
UINT Type=GetDriveType(i);
if(Type==DRIVE_FIXED||Type==DRIVE_REMOVABLE)//取硬盘和移动磁盘
{
//调用函数
}
}
程序代码:
#include "StdAfx.h" #include "FindFile.h" //这里只是测试函数 //一般我们遍历文件都是有目的 同这个写类似病毒一些东西 void Test(WIN32_FIND_DATA *fd) { MessageBox(0,fd->cFileName,0,0); } BOOL FindFile(char *pFileName, char * FindFileType) { WIN32_FIND_DATA fd; HANDLE hFind; char Type[10]={0}; sprintf(Type,".%s",FindFileType); //HANDLE hFindType;//查找对应文件类型 char FileName[260]={0}; sprintf(FileName,"%s\\*.*",pFileName); ZeroMemory(&fd,sizeof(fd)); if(0 == strlen(FileName)) { MessageBox(0,"文件名不能为空",0,0); return FALSE; } else { hFind = FindFirstFile(FileName,&fd); if(INVALID_HANDLE_VALUE==hFind) { return FALSE; } else { do { //查找文件名字中有没与 .文件后缀 注意要加点 因为点在文件名字是特殊符号 //一般是不可以用的。但可以用特殊方法来添加。 //U 盘免疫就是用这中方法来 来建立一个不能用普通方法删除autorun.inf的文件夹 if(strstr(fd.cFileName,Type)) { Test(&fd); } else { //当该文档是文件时候进行下列操作 if(fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { //除掉 . 表示当前目录 和..上一个目录 这个在dos 中可以看到 if(strcmp(fd.cFileName,".")!=0&&strcmp(fd.cFileName,"..")!=0) { char Temp[256]={0}; sprintf(Temp,"%s\\%s",pFileName,fd.cFileName); FindFile(Temp,FindFileType); } } } //继续查找下一个文件 } while (FindNextFile(hFind,&fd)); } } return TRUE; }
只扫描指定目录的文件不包括子目录
程序代码:
#include "StdAfx.h" #include "FindFiled.h" BOOL bFind(char *pFileName,char *FileType,pFun FileOpre) { bool bisFinish = FALSE; WIN32_FIND_DATA fd; // data buffer char FileName[260]={0}; HANDLE hFind; strcpy(FileName,pFileName); ZeroMemory(&fd,sizeof(fd)); strcat(FileName,"\\\\*."); strcat(FileName,FileType); if(0==strlen(FileName)) { MessageBox(0,"没有输入文件名",0,0); return FALSE; } else { hFind = FindFirstFile(FileName,&fd); if(INVALID_HANDLE_VALUE == hFind) { return FALSE; } else { do { // . 表示当前目录 .. 表示上级目录 所以没有用 if(strcmp(fd.cFileName,".")!=0||strcmp(fd.cFileName,"..")!=0) { //MessageBox(0,fd.cFileName,"文件名",0); FileOpre(&fd);//函数调用函数 其实用函数 } } while (FindNextFile(hFind,&fd)); } } CloseHandle(hFind); return FALSE; }