[CPP]
#include
#include
#include
#include
#include
#include
#include
#define MAX_PATH_LENGTH 512
#define Max_file_extension 9
unsigned long visit_dirs = 0;
unsigned long visit_files = 0;
void Listdir (char *path) {
DIR *ptr_dir;
struct Dirent *dir_entry;
int i = 0;
Char *child_path;
Char *file_path;
Child_path = (char*) malloc (sizeof (char) *max_path_length);
if (Child_path = = NULL) {
printf ("Allocate Memory for Path failed.\n");
Return
}
memset (child_path, 0, sizeof (char) *max_path_length);
File_path = (char*) malloc (sizeof (char) *max_path_length);
if (File_path = = NULL) {
printf ("Allocate memory for file path failed.\n");
Free (Child_path);
Child_path = NULL;
Return
}
memset (file_path, 0, sizeof (char) *max_path_length);
Ptr_dir = opendir (path);
while ((Dir_entry = Readdir (ptr_dir)) = NULL) {
if (Dir_entry->d_type & Dt_dir) {
if (strcmp (Dir_entry->d_name, ".") = = 0 | |
strcmp (Dir_entry->d_name, "..") = = 0) {
Continue
}
sprintf (Child_path, "%s/%s", Path, dir_entry->d_name);
printf ("[dir]%s\n", Child_path);
visit_dirs++;
Listdir (Child_path);
}
if (Dir_entry->d_type & Dt_reg) {
sprintf (File_path, "%s/%s", Path, dir_entry->d_name);
printf ("[file]%s\n", File_path);
visit_files++;
}
}
Free (Child_path);
Child_path = NULL;
Free (file_path);
File_path = NULL;
}
int main (int argc, char* argv[]) {
if (argc = = 2) {
Listdir (argv[1]);
printf ("Total DIR:%ld, total FILE:%ld\n", Visit_dirs, Visit_files);
}else{
printf ("Usage:listdir
\n ");
return;
}
R Eturn 0;
}