所以我正在研究目录遍历,我无法让 opendir 按照我想要的方式工作。它总是无法打开我发送的目录,它给出了一些未知的错误。我通常传入 argv[1],但我放弃了,只是开始硬编码路径。
char *dest = NULL;
char *filePath = ".";
char *newPath = NULL;
DIR *dirp;
struct dirent *dp;
int errno;
dirp = opendir("/home/cs429/Desktop/test");
struct stat path_stat;
if(dirp == NULL);
{
// Error Handling
fprintf(stderr, "Error failed to open input directory -%sn",strerror(errno) );
return 1;
}
有没有人看到我可以做些什么来获得 NULL?我也在 gdb 中得到这个:../sysdeps/posix/opendir.c:没有这样的文件或目录。
行
if(dirp == NULL);
不执行任何操作,并且始终执行下一个代码块,而不管 dirp
的值如何。
请删除;
以便代码
if(dirp == NULL)
{
// Error Handling
fprintf(stderr, "Error failed to open input directory -%sn",strerror(errno) );
return 1;
}
首先检查给定路径是否真的存在。
dirp = opendir("/home/cs429/Desktop/test");
手册页说:">opendir(( 函数返回一个指向 direc-tory 流的指针。 出错时,返回 NULL">
在这里,您将dirp
与正确的NULL
进行了比较,但是您在语句后加上了分号if
这称为dummy if
即无论条件是否为真,即时语句将始终执行。因此,请在if
后取下;
if(dirp == NULL)
{
//some code
}