C 搜索文件夹会显示文件夹内外的所有内容
我在Ubuntu的终端上运行我的代码,用于搜索一个特定的文件,但是搜索会生成文件夹和文件夹内的文件,也会生成文件夹外的文件。代码如下: (编译并可运行) 我知道有点不对劲,但不知道是什么C 搜索文件夹会显示文件夹内外的所有内容,c,file,ubuntu,io,directory,C,File,Ubuntu,Io,Directory,我在Ubuntu的终端上运行我的代码,用于搜索一个特定的文件,但是搜索会生成文件夹和文件夹内的文件,也会生成文件夹外的文件。代码如下: (编译并可运行) 我知道有点不对劲,但不知道是什么 非常感谢您的帮助。这是因为当前目录中也列出了和。表示父目录 回答您的评论:将路径与或进行比较。不起作用,因为正如您所看到的,路径是目录/和目录/。 while (entry) { result = snprintf(path, sizeof(path), "%s", argv[1]); snpr
非常感谢您的帮助。这是因为当前目录中也列出了
和。
表示父目录
回答您的评论:将路径与
或进行比较。
不起作用,因为正如您所看到的,路径是目录/
和目录/。
while (entry)
{
result = snprintf(path, sizeof(path), "%s", argv[1]);
snprintf(&path[result], sizeof(path) - result, "/%s", entry->d_name);
char cur_str[80];
char par_str[80];
strcpy ( cur_str , argv[1] );
strcat ( cur_str , "/." );
strcpy ( par_str , argv[1] );
strcat ( par_str , "/.." );
if (strcmp(path,cur_str) == 0 || strcmp(path ,par_str) == 0) {
break;
}
int out = displayAllFiles(path);
printf("%s", path);
result = lstat(path, &status);
if (-1 == result)
{
printf("\n");
perror("stat");
exit(2);
}
if (S_ISLNK(status.st_mode))
{
printf("%s", " is a symbolic link");
}
printf("\n");
entry = readdir(dir);
}
以上代码有效。(虽然它在非目录的文件上打印“非目录”错误)。这是因为
和也在当前目录中列出。
表示父目录
回答您的评论:将路径与
或进行比较。
不起作用,因为正如您所看到的,路径是目录/
和目录/。
while (entry)
{
result = snprintf(path, sizeof(path), "%s", argv[1]);
snprintf(&path[result], sizeof(path) - result, "/%s", entry->d_name);
char cur_str[80];
char par_str[80];
strcpy ( cur_str , argv[1] );
strcat ( cur_str , "/." );
strcpy ( par_str , argv[1] );
strcat ( par_str , "/.." );
if (strcmp(path,cur_str) == 0 || strcmp(path ,par_str) == 0) {
break;
}
int out = displayAllFiles(path);
printf("%s", path);
result = lstat(path, &status);
if (-1 == result)
{
printf("\n");
perror("stat");
exit(2);
}
if (S_ISLNK(status.st_mode))
{
printf("%s", " is a symbolic link");
}
printf("\n");
entry = readdir(dir);
}
以上代码有效。(虽然它在非目录的文件上打印“nota directory”错误)。好,然后添加以下内容:
if(strcmp(path,“…”)==0 | | strcmp(path,“.”==0)break代码>到main
应该可以吗?路径不是。
而是Directory/
或Directory/。
我将修改我的答案并提供更多细节。好的,然后添加以下内容:if(strcmp(path,“…”)==0 | | strcmp(path,“.”==0)break编码>到main
应该起作用吗?路径不是。
而是目录/
或目录/。
我将用更多细节修改我的答案。
while (entry)
{
result = snprintf(path, sizeof(path), "%s", argv[1]);
snprintf(&path[result], sizeof(path) - result, "/%s", entry->d_name);
char cur_str[80];
char par_str[80];
strcpy ( cur_str , argv[1] );
strcat ( cur_str , "/." );
strcpy ( par_str , argv[1] );
strcat ( par_str , "/.." );
if (strcmp(path,cur_str) == 0 || strcmp(path ,par_str) == 0) {
break;
}
int out = displayAllFiles(path);
printf("%s", path);
result = lstat(path, &status);
if (-1 == result)
{
printf("\n");
perror("stat");
exit(2);
}
if (S_ISLNK(status.st_mode))
{
printf("%s", " is a symbolic link");
}
printf("\n");
entry = readdir(dir);
}