Я не использую Windows, поэтому я не уверен, что этот ответ может быть таким простым, как opendir("/")
, или следующий код будет правильно работать на Windows. Однако, предполагая, что /..
работает на Windows, а C:/..
возвращает NULL
, следующее должно напечатать все элементы в каталоге root.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <dirent.h>
DIR* _get_root(void) {
DIR *d = NULL, *prev = NULL;
char *path = malloc(strlen(".") + 1);
char *pdir = "/..";
strcpy(path, ".");
do {
if (prev) {
closedir(prev);
}
prev = d;
path = realloc(path, strlen(path) + strlen(pdir) + 1);
strcat(path, pdir);
d = opendir(path);
} while (d);
free(path);
return prev;
}
int main(int argc, char **argv) {
DIR *root = _get_root();
struct dirent *sub;
while ((sub = readdir(root))) {
printf("%s\n", sub->d_name);
}
closedir(root);
return 0;
}
Конечно, прежде чем использовать это предложение, попробуйте просто
DIR *root = opendir("/");
на Windows и посмотрите, работает ли оно.