我正在编写一个程序,当它通过一个目录时,它能够遍历每个子目录&这些子目录中的文件。当注释掉的条件处于活动状态时,它可以正常工作,但是当删除该部分时,在文件实际存在的情况下,第二行将返回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
是来自命令行的目录或文件。
答案 0 :(得分:3)
在检查错误发生之前,您不能检查errno
的值。 (在这种情况下,opendir
将返回NULL
以指示错误。)如果未报告任何错误,errno
可能有任何值,因此您的测试很可能是错误的正。
有关详细信息,请参阅Why does a call to the crypt() function from unistd.h set the errno to ENOENT?。