在C语言中,如何到达指定的目录?
我必须做一个程序,我需要索引指定目录中的文件。我已经完成了索引部分,但我遇到的问题是如何导航到目录。 例如,当我启动程序时,它会询问“您希望索引哪个目录”,然后输入“usr/Documents/CS/Assignment4”,我如何到达“Assignment4”目录?我知道需要递归,但我真的很困惑C中的目录是如何工作的。假设我的源文件在“usr/Documents/SourceCode”中,那么我应该怎么做才能获得Assignment4 我知道我听起来想要所有的答案,但我完全不知道目录是如何工作的,我的书很烂。所以,即使你所拥有的只是一个关于这个的好教程的链接,那也太棒了在C语言中,如何到达指定的目录?,c,recursion,posix,directory,C,Recursion,Posix,Directory,我必须做一个程序,我需要索引指定目录中的文件。我已经完成了索引部分,但我遇到的问题是如何导航到目录。 例如,当我启动程序时,它会询问“您希望索引哪个目录”,然后输入“usr/Documents/CS/Assignment4”,我如何到达“Assignment4”目录?我知道需要递归,但我真的很困惑C中的目录是如何工作的。假设我的源文件在“usr/Documents/SourceCode”中,那么我应该怎么做才能获得Assignment4 我知道我听起来想要所有的答案,但我完全不知道目录是如何工作
我正在运行Linux,确切地说是Ubuntu。GCC是编译器。C编程语言没有文件系统的概念。这是一个操作系统特有的问题 基于您问题中的目录样式,尽管听起来您使用的是unix/linux样式的系统。如果是这种情况,那么您正在寻找
opendir
函数
Angelo递归地遍历C中的目录如下: 使用
opendir
和readdir
列出目录条目。我可能不应该这样做,但我发布了一个完整的代码示例(sans错误处理),因为要确保正确使用API,您需要做一些小事情:
DIR *dir;
struct dirent *de;
const char *name;
dir = opendir(dirpath);
if (dir == NULL) {
/* handle error */
}
for (;;) {
errno = 0;
de = readdir(dir);
if (de == NULL) {
if (errno != 0) {
/* handle error */
} else {
/* no more entries left */
break;
}
}
/* name of file (prefix it with dirpath to get a usable file path) */
name = de->d_name;
/* ignore . and .. */
if (name[0] == '.' && (name[1] == '\0' || (name[1] == '.' && name[2] == '\0')))
continue;
/* do something with the file */
}
if (closedir(dir) != 0) {
/* handle error */
}
在处理每个文件时,请确保预先添加指向该文件的dirpath(如果需要,请加上斜杠)。您也可以使用chdir
来下降和上升,但这在实践中会带来复杂性(例如,您不能同时遍历两个目录),因此我个人建议您保持当前工作目录不变,并使用字符串操作来连接路径
为了确定路径是否是目录(以及是否应该opendir()
it),我建议使用lstat()
,而不是stat()
,因为后者遵循符号链接,这意味着您的目录遍历可能会陷入循环,最终会得到一些结果
当然,由于目录结构本质上是递归的,递归在遍历过程中起着自然的作用:当子路径是目录时,进行递归调用。对不起,我的措辞错了。不知道目录如何工作,只知道如何在C中使用它们。例如如何遍历目录等。一个简单的解决方案可能是在要索引的目录中运行程序。听起来您正在编写“ls-e”系统实用程序:)