GNU/Linux >> Znalost Linux >  >> Linux

Počítání počtu souborů v adresáři pomocí C

Žádná záruka, že se tento kód zkompiluje, a je skutečně kompatibilní pouze s Linuxem a BSD:

#include <dirent.h>

...

int file_count = 0;
DIR * dirp;
struct dirent * entry;

dirp = opendir("path"); /* There should be error handling after this */
while ((entry = readdir(dirp)) != NULL) {
    if (entry->d_type == DT_REG) { /* If the entry is a regular file */
         file_count++;
    }
}
closedir(dirp);

Viz readdir .


Pokud chcete zahrnout také podadresáře, můžete použít tuto funkci, kterou používám v některých mých kódech. Pravděpodobně byste jej měli upravit, aby zahrnoval více kontroly chyb a podporoval různé oddělovače adresářů.

int countfiles(char *path) {
    DIR *dir_ptr = NULL;
    struct dirent *direntp;
    char *npath;
    if (!path) return 0;
    if( (dir_ptr = opendir(path)) == NULL ) return 0;

    int count=0;
    while( (direntp = readdir(dir_ptr)))
    {
        if (strcmp(direntp->d_name,".")==0 ||
            strcmp(direntp->d_name,"..")==0) continue;
        switch (direntp->d_type) {
            case DT_REG:
                ++count;
                break;
            case DT_DIR:            
                npath=malloc(strlen(path)+strlen(direntp->d_name)+2);
                sprintf(npath,"%s/%s",path, direntp->d_name);
                count += countfiles(npath);
                free(npath);
                break;
        }
    }
    closedir(dir_ptr);
    return count;
}

Linux
  1. jak najít vlastníka souboru nebo adresáře v pythonu

  2. Maximální počet souborů/adresářů na Linuxu?

  3. Počítání počtu souborů v adresáři pomocí příkazu terminálu OSX

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Jak získat počet souborů v adresáři pomocí příkazového řádku?

  3. Použití / při použití cd

  1. Jaký je nejlepší způsob, jak spočítat počet souborů v adresáři?

  2. Použití –exclude With The Du Command?

  3. Jak spočítat počet souborů v adresáři a odstranit nejstarší, pokud počet překročí 5?