gpt4 book ai didi

c - Errno 无法识别所有文件

转载 作者:行者123 更新时间:2023-11-30 18:34:54 25 4
gpt4 key购买 nike

我正在编写一个程序,当传递一个目录时,它能够运行这些子目录中的每个子目录和文件。当注释掉的条件处于事件状态时,它可以正常工作,但是当删除该部分时,第二行将返回 errno == 2在某些情况下,当文件实际存在时,并且 errno == 20仅适用于其他一些文件。如何解决此问题,以便它可以识别每个文件,而无需注释掉条件部分?

node* directories(char* fileName, node* result){
DIR *din = opendir(fileName);
char currdirec[9999];
if(errno == 20) //&& fileName[strlen(fileName)-4] == '.')
{
node* list = createList(fileName);
head = NULL;
head = mergeLists(result, list);
}
else
{
struct dirent *dir;
getcwd(currdirec, sizeof(currdirec));
char* temp = currdirec;
strcat(currdirec, "/");
strcat(currdirec, fileName);
chdir(currdirec);
while((dir = readdir(din)) != NULL)
{
if(dir->d_type == DT_REG)
{
directories(dir->d_name, result);
}
else if(dir->d_type == DT_DIR && strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0)
{
directories(dir->d_name, result);
chdir(currdirec);
}
}
chdir(temp);
}
return result;
}

fileName是来自命令行的目录或文件。

最佳答案

在检查是否发生错误之前,不得检查 errno 的值。 (在这种情况下,opendir 将返回 NULL 来指示错误。)如果没有报告错误,errno 可能具有任何值,因此它您的测试很可能会出现误报。

参见Why does a call to the crypt() function from unistd.h set the errno to ENOENT?了解更多详细信息。

关于c - Errno 无法识别所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454043/

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