用C语言编出遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言编出遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件相关的知识,希望对你有一定的参考价值。

编写一个小程序,完成遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件的功能,目录中可能包含无限级子目录。
并解释一下。

#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));
       
    
    re
参考技术A int findFiles(string path, string extension, vector<string>& files)

long hFile=0L;
_finddata_t fileInfo;
string p;
if((hFile=_findfirst(p.assign(path).append("/*").c_str(),&fileInfo))!=-1L)

do

if(fileInfo.attrib & _A_SUBDIR)

if(strcmp(fileInfo.name,".") && strcmp(fileInfo.name,".."))
findFiles(p.assign(path).append("\\").append(fileInfo.name), extension, files);

else

if(matchExtension(fileInfo.name, extension))

string value = p.assign(path).append("\\").append(fileInfo.name);
files.push_back(value);



while(_findnext(hFile, &fileInfo)==0);
_findclose(hFile);


return files.size();

虽然使用了C++中的string类和vector类,不过核心是io.h中的_findfirst()和_findnext()函数,C语言中用char[]和char*[]代替就可以了,只不过要加一些内存管理的代码不容易让你看清程序的执行方法。
这是一个递归的函数,参数是初始目录,扩展名(如.txt),返回文件路径的vector,返回值是找到的总文件数。
这个函数遍历当前目录下的所有目录和文件,如果是目录(且不是.和..),就调用自己去遍历子目录,并返回得到的文件加入结果。如果是文件去匹配扩展名,相同就加入结果。以此类推。
对了,匹配扩展名的函数是:
bool matchExtension(string fileName,string extension)

char *str = (char *) malloc(extension.length()+1);
char *ext = (char *) malloc(getExtension(fileName).length()+1);
strcpy(str,extension.c_str());
strcpy(ext,getExtension(fileName).c_str());

bool isMatch = false;
char *p = strtok(str,"|");

while(p && !isMatch)

if(strcmp(ext,p)==0) isMatch=true;
p = strtok(NULL,"|");


free(str);
free(ext);

return isMatch;
本回答被提问者采纳

递归遍历指定目录下所有指定的文件并删除

有一台电脑中毒,几乎每个文件夹下都复制了几个文件,用win7自带的索引搜索出近6万个文件,想全选删除直接死机。没办法,用批处理。

核心语句如下:

@echo off

for /f "delims=" %%i in (‘dir /s /b Recovery+*‘) do (

del /s /q %%i)

说明: dir /s 表示递归查找,/b 只显示目录和文件名,如果不加会显示时间等信息,"Recovery+*"是病毒产生的文件名的一部分,以这个开头的有几个,所以用*表示。

使用中有些目录提示目录 名称过长,暂时没有解决,只能手工删除,已经节省好多时间了。

以上是关于用C语言编出遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

怎样使用C语言列出某个目录下的文件?

如何用C语言编出 读入一个五位数,分割该数各位上的数并将分割的数字以间隔三

递归遍历指定目录下所有指定的文件并删除

python遍历目录下的所有文件和目录详细介绍

用C语言循环嵌套语句编出一个三角形形状

用shell脚本递归遍历某个目录下的所有文件并移动到某个指定的目录中