【編程】C語言遞歸遍歷文件夾

#include <cstring>        // 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 = "G:\\高清電影";//要讀取的初始路徑
FileSearch(dir);
printf( "Total files is %d\n\n", i+1);
Write();
printf("done!\n");
return 0;
}
int Write(void)//將獲得的目錄棧寫到本地文件
{
FILE*fp;
if ((fp = fopen("dir.txt", "w")) == NULL)
return -1;
fprintf(fp,"Total files is %d\n\n", i+1);
while (i > -1)
{
fprintf(fp, "%s\t%ld\n", data[i].dir, data[i].size);
i--;
}
fclose(fp);
}


int FileSearch(const char *dir)//遞歸遍歷當前目錄下的所有文件
{
long handle;
_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)
{
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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章