In: Computer Science
c program
//the file's size in bytes
unsigned int fileSize(const char* name){
return 0;
}
//same as fileSize except if the file is a directory then it
recursively finds the size of directory and all files it
contains
unsigned int fileSizeRec(const char* name){
return 0;
}
#include <stdio.h> #include <sys/stat.h> #include <dirent.h> #include <string.h> //the file's size in bytes unsigned int fileSize(const char* name){ struct stat st; stat(name, &st); return st.st_size; } //same as fileSize except if the file is a directory then it recursively finds the size of directory and all files it contains unsigned int fileSizeRec(const char* name){ struct stat st; stat(name, &st); // check if this is a file if(S_ISREG(st.st_mode)) { return fileSize(name); } else { // to calculate total size of the current directory unsigned int directory_size = 0; // Open current directory DIR *pDir; if ((pDir = opendir(name)) != NULL) { struct dirent *pDirent; // read directory's content one by one. while ((pDirent = readdir(pDir)) != NULL){ // create the relative path to the file inside folders char buffer[PATH_MAX + 1]; strcat(strcat(strcpy(buffer, name), "/"), pDirent->d_name); // If current entry in directory, is another directory // and it is not . or .. (which is for parent and current // directory) pointers.. if (pDirent->d_type == DT_DIR) { if (strcmp(pDirent->d_name, ".") != 0 && strcmp(pDirent->d_name, "..") != 0) { // recursively find the size of internal directory directory_size += fileSizeRec(buffer); } } else { // current entry is a file, add its size directory_size += fileSize(buffer); } } closedir(pDir); } return directory_size; } } int main(void) { int x = fileSizeRec(".."); printf("%d", x); return 0; }