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

しかし、それは私が望んでいた方法でディレクトリをトラバースしません。2番目のwhileループの後、

entry = fts_read(ftsp)

NULLを返します。これに対する簡単な修正はありますか、それとも他のものを使用する必要がありますか?

4

1 に答える 1

2

アプローチを再構築する必要があります。内側whileはファイルのリストを使い果たしているため、もちろん外側は一度成功すると失敗します。

より良いアプローチは、おそらくファイルを保存することです。これにより、新しい着信ファイルを保存されたファイルと比較するか、再帰的なアプローチを使用できます。どちらもメモリが必要です。

于 2012-10-22T10:25:20.447 に答える