C 搜索文件夹会显示文件夹内外的所有内容

C 搜索文件夹会显示文件夹内外的所有内容,c,file,ubuntu,io,directory,C,File,Ubuntu,Io,Directory,我在Ubuntu的终端上运行我的代码,用于搜索一个特定的文件,但是搜索会生成文件夹和文件夹内的文件,也会生成文件夹外的文件。代码如下: (编译并可运行) 我知道有点不对劲,但不知道是什么 非常感谢您的帮助。这是因为当前目录中也列出了和。表示父目录 回答您的评论:将路径与或进行比较。不起作用,因为正如您所看到的,路径是目录/和目录/。 while (entry) { result = snprintf(path, sizeof(path), "%s", argv[1]); snpr

我在Ubuntu的终端上运行我的代码,用于搜索一个特定的文件,但是搜索会生成文件夹和文件夹内的文件,也会生成文件夹外的文件。代码如下:

(编译并可运行)

我知道有点不对劲,但不知道是什么


非常感谢您的帮助。

这是因为当前目录中也列出了
表示父目录

回答您的评论:将路径与
进行比较。
不起作用,因为正如您所看到的,路径是
目录/
目录/。

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);
}