问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-26 15:19

我来回答

2个回答

热心网友 时间:2022-04-22 09:11

#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

热心网友 时间:2022-04-22 10:29

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;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女方早婚早育要离婚未满月孩子该怎么才能判给 家庭暴力,孩子未满月,孩子母亲要求离婚 孩子未满月是否可以离婚 孩子未满月可不可以离婚 新生儿未满月是否可离婚 固原斜视眼有哪些表现? 如何看待儿童斜视问题?固原 固原斜视儿童有必要做手术吗 HOJOJODO皇家金盾S1智能电子锁-详细介绍 皇家金盾智能锁怎么改密码 windows下使用C/C++怎么遍历目录并读取目录下的文件列表 windows下使用C/C++怎么遍历目录并读取目录下的文件列表 如何用C代码遍历整个windows文件夹查找某个特定文件? 如何用C代码遍历整个windows文件夹查找某个特定文件? C语言如何遍历目录 (C++也可以) findfirst findnext怎么用? C语言如何遍历目录 (C++也可以) findfirst findnext怎么用? C语言如何实现遍历文件夹下的所有txt文件并在文件中搜索字符串 C语言遍历所有文件的函数! C语言遍历所有文件的函数! 在windows下 怎么用c语言遍历文件夹?要用纯c的 在windows下 怎么用c语言遍历文件夹?要用纯c的 请教C语言如何遍历文本文件,比较取得其中想要的内容?(高分悬赏) 请教C语言如何遍历文本文件,比较取得其中想要的内容?(高分悬赏) c语言遍历d盘下有多少个文件? c语言遍历d盘下有多少个文件? C语言:如何遍历指定的文件夹(可以包括子文件夹)中的每一个文件名 C/C++编程遍历文件夹,统计当前文件个数,输出文件名 怎么用C语言编程遍历文件夹下所有文件名 如何用C实现遍历文件夹 怎么用C语言遍历文件啊? 用C语言编出遍历出某个目录以及其子目录下所有以TXT为扩展名的文本文件 C语言遍历目录 C语言遍历目录 c语言遍历如何输出 c语言遍历如何输出 C语言,遍历程序目录下txt文件,每查到一个把文件名和目前个数传给函 C语言,遍历程序目录下txt文件,每查到一个把文件名和目前个数传给函 枣夹核桃仁什么牌子好 做枣夹核桃用什么枣是最好的呢 华为p20现在实体店还有货吗? 结婚摆盘有用枣夹核桃的吗? 换手机,最近华为有新机出吗 用手夹核桃,为什么夹一个很难夹开,但夹两个就很容易夹开 华为p20手机何时出新机 现在的是什么品牌的红枣夹核桃好吃 这是什么啊?买了一斤怎么都弄不开,用夹核桃的夹子都夹不动这东西。在上海买的 请帮我查下这个华为p20是不是新机 能不能用电梯门夹核桃? 大枣夹核桃是什么寓意? 为什么我的手机空间足,却安装不了微信? 安卓手机下载了微信怎么安装不了