在任何操作系统中获取根目录

get root directory in any operating sytem

有什么方法可以让 DIR 指针指向根目录,无论是什么操作系统?最好不要像 #ifdef _WIN32 #endif (etc..) 这样的宏检查,例如在 windows 中指向 C/ 文件夹的指针将被返回。

我不使用 Windows,所以我不确定这个答案是否可以像 opendir("/") 一样简单,或者下面的代码是否可以在 Windows 上正常工作.但是,假设 /.. 适用于 Windows,并且 C:/.. returns NULL,以下应打印根目录中的所有项目。

#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 上看看它是否有效。

Is there is any way to get the DIR pointer to the root directory, no matter what the operating system? preferably without the macros checking like so #ifdef _WIN32 #endif (etc..) so for example in windows pointer to the C/ folder will be returned.

该问题假定存在一个单一文件系统根的通用概念。不是这种情况。 Windows尤其是一个多根文件系统,每个盘符都有一个单独的根,而且,没有绝对意义的主驱动器(Windows的系统文件不一定是在 C: 驱动器上)。其实支持C语言的操作系统根本就不需要分层文件系统。

总的来说,传递给 fopen()opendir()、& co 的文件名字符串的解释。是依赖于实现的,所以不,该语言没有提供一种通用的方法来获取 DIR * 到文件系统根目录,即使在该概念首先有意义的系统上也是如此。这是重新考虑为什么你认为你想要这样的东西的一个很好的理由——无论你想用它做什么可能都不像你想象的那么普遍。