功能
- 目录遍历
- 文件遍历
- 计算文件大小
- 统计目录下文件大小
函数
/************************************
RraverseDir:实现目录遍历
************************************/
static int RraverseDir(void *dirsrc) {
// printf("Start RraverseDir\n");
char dirpath[1024];
DIR *dir = NULL;
struct dirent *ent;
dir = opendir(dirsrc);
if (dir) {
while ((ent = readdir(dir))) {
if ((strcmp(ent->d_name, ".") == 0) || (strcmp(ent->d_name, "..") == 0)) {
continue;
}
if (ent->d_type == DT_DIR) {
memset(dirpath, 0x00, sizeof(dirpath));
strcpy(dirpath, dirsrc);
strcat(dirpath, "/");
strcat(dirpath, ent->d_name);
printf("dirpath:%s\n", dirpath);
RraverseFile(dirpath);
RraverseDir(dirpath);
continue;
}
}
closedir(dir); //关闭文件夹
} else {
printf("dir open err");
}
return 0;
}
/************************************
RraverseFile:实现文件遍历
************************************/
static int RraverseFile(void *filesrc) {
// printf("Start RraverseFile\n");
DIR *dir = NULL;
struct dirent *ent;
char filename[128];
dir = opendir(filesrc);
if (dir) {
while ((ent = readdir(dir))) {
if ((strcmp(ent->d_name, ".") == 0) || (strcmp(ent->d_name, "..") == 0)) {
continue;
}
if (NULL != strstr(ent->d_name, ".txt")) {
memset(filename, 0x00, sizeof(filename));
strcpy(filename, filesrc);
strcat(filename, "/");
strcat(filename, ent->d_name);
printf("filename:%s\n", filename);
CalculateFileSize(filename);
filenum++;
continue;
}
}
closedir(dir);
}
return 0;
}
/************************************
CalculateFileSize:计算文件大小
************************************/
static int CalculateFileSize(void *file) {
// printf("Start CalculateFileSize\n");
long size = 0;
FILE *fin = NULL;
fin = fopen(file, "rb");
fseek(fin, 0L, SEEK_END); /* 定位到文件末尾 */
size = ftell(fin);
printf("size = %d\n", size);
return 0;
}
调用函数
/************************************
TestDie01:
************************************/
static long filenum = 0;//统计该目录下的文件个数
int TestDie01() {
printf("Start TestDie01\n");
char *dirsrc = "dir1"; //
RraverseDir(dirsrc);
printf("filenum = %d\n", filenum);
return 0;
}
主函数
int main() {
printf("Main start!\n");
TestDie01(); //
getchar();
return 0;
}