在任何操作系统中获取根目录
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 *
到文件系统根目录,即使在该概念首先有意义的系统上也是如此。这是重新考虑为什么你认为你想要这样的东西的一个很好的理由——无论你想用它做什么可能都不像你想象的那么普遍。
有什么方法可以让 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 theC/
folder will be returned.
该问题假定存在一个单一文件系统根的通用概念。不是这种情况。 Windows尤其是一个多根文件系统,每个盘符都有一个单独的根,而且,没有绝对意义的主驱动器(Windows的系统文件不一定是在 C: 驱动器上)。其实支持C语言的操作系统根本就不需要分层文件系统。
总的来说,传递给 fopen()
、opendir()
、& co 的文件名字符串的解释。是依赖于实现的,所以不,该语言没有提供一种通用的方法来获取 DIR *
到文件系统根目录,即使在该概念首先有意义的系统上也是如此。这是重新考虑为什么你认为你想要这样的东西的一个很好的理由——无论你想用它做什么可能都不像你想象的那么普遍。