Žá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;
}
Jak změním dokončení historie bash, abych dokončil to, co je již na lince?
Nastavení barev pozadí Vim