目录遍历攻击

3

我正在尝试遍历一个目录并检查重复文件。

void findDuplicates(){
    char *dot[] = {".", 0};
    FTS *ftsp, *temp_ftsp;
    FTSENT *entry, *temp_entry;
    int fts_options = FTS_LOGICAL;
    ftsp = fts_open(dot, fts_options, NULL);
    while((entry = fts_read(ftsp)) != NULL){
        temp_ftsp = ftsp;
        while((temp_entry = fts_read(temp_ftsp)) != NULL){
            compareEntries(temp_ftsp, ftsp);
        }
    }
}

但是它没有按照我想要的方式遍历目录。在第二个 while 循环之后,

entry = fts_read(ftsp)

返回NULL。有没有简单的解决方法或者我应该使用其他东西?

1个回答

2
你需要重新调整你的方法。内部的while正在耗尽文件列表,因此当外部成功后,它自然会失败一次。
更好的方法可能是存储文件,这样你就可以将每个新进入的文件与存储的文件进行比较,或者使用递归方法。两种方法都需要内存。

好主意,我想我得这么做。把所有文件存储在一个结构中似乎是最简单的方法。谢谢。 - Klāvs Taube
@KlāvsTaube 如果您觉得这篇回答有帮助,请随意点赞或接受。 :) - unwind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接