Counting the number of files in a directory using C

前端 未结 4 788
执念已碎
执念已碎 2020-12-03 04:58

How can I count the number of files in a directory using C on linux platform.

4条回答
  •  离开以前
    2020-12-03 05:47

    If you do not care about current directory . and the parent directory.. like this ones:

    drwxr-xr-x  3 michi michi      4096 Dec 21 15:54 .
    drwx------ 30 michi michi     12288 Jan  3 10:23 ..
    

    You can do something like this:

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main (void){
        size_t count = 0;
        struct dirent *res;
        struct stat sb;
        const char *path = "/home/michi/";
    
        if (stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)){
            DIR *folder = opendir ( path );
    
            if (access ( path, F_OK ) != -1 ){
                if ( folder ){
                    while ( ( res = readdir ( folder ) ) ){
                        if ( strcmp( res->d_name, "." ) && strcmp( res->d_name, ".." ) ){
                            printf("%zu) - %s\n", count + 1, res->d_name);
                            count++;
                        }
                    }
    
                    closedir ( folder );
                }else{
                    perror ( "Could not open the directory" );
                    exit( EXIT_FAILURE);
                }
            }
    
        }else{
            printf("The %s it cannot be opened or is not a directory\n", path);
            exit( EXIT_FAILURE);
        }
    
        printf( "\n\tFound %zu Files\n", count );
    }
    

    Output:

    1) - .gnome2
    2) - .linuxmint
    3) - .xsession-errors
    4) - .nano
    5) - .kde
    6) - .xsession-errors.old
    7) - .gnome2_private
    8) - Public
    9) - .gconf
    10) - .bashrc
    11) - .macromedia
    12) - .thunderbird
    13) - Pictures
    14) - .profile
    15) - .cinnamon
    16) - .pki
    17) - Compile
    18) - Desktop
    19) - .Private
    20) - .cache
    21) - .Xauthority
    22) - .ICEauthority
    23) - VirtualBox VMs
    24) - .bash_history
    25) - .mozilla
    26) - .local
    27) - .config
    28) - .codeblocks
    29) - Documents
    30) - .bash_logout
    31) - Videos
    32) - Templates
    33) - Downloads
    34) - .adobe
    35) - .gphoto
    36) - Music
    37) - .dbus
    38) - .ecryptfs
    39) - .sudo_as_admin_successful
    40) - .gnome
    
        Found 40 Files
    

提交回复
热议问题