gpt4 book ai didi

c - 使用 stat() 函数测试 DIRENT 是目录还是文件的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:34:09 24 4
gpt4 key购买 nike

我在使用“if(S_IFDIR(stbuf.st_mode))”行时遇到了一些问题。这是测试要递归到的目录的正确方法吗?目前该函数似乎正确执行了 1 或 2 个循环,然后失败并出现段错误。

我已经尝试了以下可能更多的条件。

S_ISDIR(st_mode)
((st_mode & ST_IFMT) == S_IFDIR)
S_IFDIR(stbuf.st_mode)

我已经包含了整个函数,因为我担心问题可能出在其他地方。

void getFolderContents(char *source, int temp){
struct stat stbuf;
int isDir;
dirPnt = opendir(source);
if(dirPnt != NULL){
while(entry = readdir(dirPnt)){
char *c = entry->d_name;
if(strcmp(entry->d_name, cwd) == 0 || strcmp(entry->d_name, parent) == 0){
}
else{
stat(entry->d_name, &stbuf);
printf("%i %i ", S_IFMT, stbuf.st_mode);
if(S_IFDIR(stbuf.st_mode)){ //Test DIR or file
printf("DIR: %s\n", entry->d_name);
getFolderContents(entry->d_name, 0);
}
printf("FILE: %s\n", entry->d_name);
}
}
closedir(dirPnt);
}

最佳答案

是的,没错。但由于您永远不会切换到该目录,因此您将找不到它。

考虑以下目录层次结构:

 a
|
+- b
| |
| +- c
...

您的代码将扫描其当前目录,并找到“a”。它会判断自己是一个目录,并递归调用自己,并打开“a”进行读取。这行得通。该扫描将找到一个名为“b”的目录,但尝试仅使用条目名称打开它会失败,因为路径现在是“a/b”。

我建议在打开之前切换到目录(使用 <a href="http://linux.die.net/man/2/chdir" rel="noreferrer noopener nofollow">chdir()</a> )。这意味着你可以 opendir(".") .存储旧路径,chdir()当递归该级别完成时再次退出(不是在进行递归调用以更深入之前)。

关于c - 使用 stat() 函数测试 DIRENT 是目录还是文件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com