Tidak ada jaminan bahwa kode ini dapat dikompilasi, dan ini benar-benar hanya kompatibel dengan Linux dan 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);
Lihat readdir
.
Jika Anda ingin menyertakan subdirektori juga, Anda dapat menggunakan fungsi ini yang saya gunakan di beberapa kode saya. Anda mungkin harus memodifikasinya untuk menyertakan beberapa pemeriksaan kesalahan dan mendukung pemisah direktori yang berbeda.
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;
}
Bagaimana cara mengubah penyelesaian riwayat bash untuk menyelesaikan apa yang sudah dipertaruhkan?
Mengatur warna latar belakang Vim