Программирование на C: как получить все элементы в текущем каталоге

Чтобы получить все элементы текущего каталога в C, вы можете использовать следующие методы:

  1. Использование dirent.h и opendir():

    #include <dirent.h>
    int main() {
       DIR *dir;
       struct dirent *entry;
       dir = opendir(".");
       if (dir == NULL) {
           perror("opendir() error");
           return 1;
       }
       while ((entry = readdir(dir)) != NULL) {
           printf("%s\n", entry->d_name);
       }
       closedir(dir);
       return 0;
    }
  2. Использование функций, специфичных для Windows (для платформ Windows):

    #include <windows.h>
    int main() {
       WIN32_FIND_DATA findData;
       HANDLE hFind;
       hFind = FindFirstFile("*", &findData);
       if (hFind == INVALID_HANDLE_VALUE) {
           perror("FindFirstFile() error");
           return 1;
       }
       do {
           printf("%s\n", findData.cFileName);
       } while (FindNextFile(hFind, &findData));
       FindClose(hFind);
       return 0;
    }
  3. Использование POSIX-совместимых функций (для Unix-подобных систем):

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <dirent.h>
    int main() {
       struct dirent namelist;
       int count, i;
       count = scandir(".", &namelist, NULL, alphasort);
       if (count == -1) {
           perror("scandir() error");
           return 1;
       }
       for (i = 0; i < count; i++) {
           printf("%s\n", namelist[i]->d_name);
           free(namelist[i]);
       }
       free(namelist);
       return 0;
    }

Эти методы выведут список всех элементов (файлов и каталогов) в текущем каталоге. Первый метод является наиболее переносимым и работает как в Windows, так и в Unix-подобных системах. Второй метод специфичен для платформ Windows, а третий метод использует POSIX-совместимые функции для Unix-подобных систем.