I'm trying to traverse a directory and check for duplicate files.
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);
}
}
}
But it doesn't traverse the directory the way I wanted to. After the 2nd while loop, the
entry = fts_read(ftsp)
returns NULL. Is there an easy fix for this or I should use something else?
You need to re-structure your approach. The inner
while
is exhausting the list of files, so of course the outer will fail after succeeding, once.A better approach is probably to store the files so you can just compare each new incoming file against the stored ones, or use a recursive approach. Both will require memory.