zoukankan      html  css  js  c++  java
  • C语言递归遍历文件及文件夹

    递归遍历文件夹下文件:

    #include <string.h>        // for strcpy(), strcat()
    #include <io.h>
    #include<stdio.h>
    #define Max 100000//文件数量
    int FileSearch(const char *dir);
    int Write(void);
    int i = -1;
    typedef struct Data{
    unsigned long size;
    char dir[500];
    }Data;
    Data data[Max];
    int main(void)
    {
    char *dir = "D:\ziptest\ziptest\Yasuotest\YA";//要读取的初始路径
    FileSearch(dir);
    printf( "Total files is %d
    
    ", i+1);
    Write();
    printf("done!
    ");
    return 0;
    }
    int Write(void)//将获得的目录栈写到本地文件
    {
    FILE*fp;
    if ((fp = fopen("1.txt", "w")) == NULL)
    return -1;
    fprintf(fp,"Total files is %d
    
    ", i+1);
    while (i > -1)
    {
    fprintf(fp, "%s	%ld
    ", data[i].dir, data[i].size);
    i--;
    }
    fclose(fp);
    }
     
     
    int FileSearch(const char *dir)//递归遍历当前目录下的所有文件
    {
    long handle;
    struct _finddata_t findData;
    char dirNew[500];
    strcpy(dirNew, dir);
    strcat(dirNew, "\*.*");
    if ((handle = _findfirst(dirNew, &findData)) == -1L)
    {
    printf("Failed to findfrist file");
    return -1;
    }
    while (_findnext(handle, &findData) == 0)
    {
    	printf("%s",dirNew);
    if (findData.attrib & _A_SUBDIR)
    {
    if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
    continue;
    strcpy(dirNew, dir);
    strcat(dirNew, "\");
    strcat(dirNew, findData.name); 
    FileSearch(dirNew);
     
    }
    else
    {
    if (++i < Max)//将路径入栈
    {
    strcpy(data[i].dir , dir);
    strcat(data[i].dir, "\");
    strcat(data[i].dir, findData.name);
    data[i].size = findData.size;
    } 
    } 
    }
    _findclose(handle);
    }
    
  • 相关阅读:
    Hive的安装和建表
    在MarkDown中插入数学公式对照表(持续更新)
    Beta版本冲刺总汇
    a版本十日冲刺总汇
    “我们只是信息的搬运工”
    调查报告
    Beta版本冲刺第七天
    Beta版本冲刺第六天
    Beta版本冲刺第五天
    Beta版本冲刺第四天
  • 原文地址:https://www.cnblogs.com/cqyp/p/13754254.html
Copyright © 2011-2022 走看看