c/c++实现遍历文件夹下特定的文件

#include <io.h>
#include <cstring>
#include <iostream>

using namespace std;

const int MAXLEN = 1024;
//定义最大目录长度
unsigned long FILECOUNT = 0;
//记录文件数量


void ListDir(const char* pchData)
{
    _finddata_t   fdata;
    //定义文件查找结构对象
    long   done;
    char tempdir[MAXLEN]={0};
    //定义一个临时字符数组,存储目录
    strcat(tempdir, pchData);
//连接字符串
    strcat(tempdir, "*.*");        //只查找*。*格式的
//连接字符串
    done   =  _findfirst(tempdir, &fdata);
//开始查找文件
    if (done != -1)
//是否查找成功
    {
        int ret = 0;
        while  (ret != -1)
//定义一个循环
        {
            if (fdata.attrib != _A_SUBDIR)
//判断文件属性
            {
                if (strcmp(fdata.name,"...")  != 0 &&  strcmp(fdata.name,"..") != 0 &&  strcmp(fdata.name,".") != 0)            //过滤
                {
                    /*char dir[MAXLEN]={0};            //定义字符数组
                    strcat(dir,pchData);
//连接字符串
                    strcat(dir,"");
//连接字符串

 strcat(dir,fdata.name);             //连接字符串
                    cout << dir << endl;     */
//输出查找的文件
 cout << fdata.name << endl;
                    FILECOUNT++;
//累加文件
                }
            }
            ret = _findnext(done, &fdata);
//查找下一个文件
            if (fdata.attrib == _A_SUBDIR && ret  != -1)      //判断文件属性,如果是目录,则递归调用
            {
                if (strcmp(fdata.name,"...")  != 0 &&  strcmp(fdata.name,"..") != 0 &&  strcmp(fdata.name,".") != 0)            //过滤
                {
                    char pdir[MAXLEN]=  {0};            //定义字符数组

 strcat(pdir,pchData);               //连接字符串
                    strcat(pdir , "");
//连接字符串

 strcat(pdir,fdata.name);            //连接字符串
                    ListDir(pdir);
//递归调用
                }
            }
        }
    }
}



int main(void)
{
    while (true)         //设计一个循环
    {
        FILECOUNT = 0;
        char  szFileDir[128] = {0}; //定义一个字符数组,存储目录
        cin >> szFileDir;
        if (strcmp(szFileDir, "e") == 0)  //退出系统
        {
            break;
        }
        ListDir(szFileDir);  //调用ListDir函数遍历目录
        cout << "共计" << FILECOUNT << "个文件" << endl;
        //统计文件数量
    }
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.