2012-04-02 3 views
1

私は、特定のフォルダのサブディレクトリを再帰的に反復処理し、そのフォルダ内のすべての子のパスを取得する必要があるプロジェクトに取り組んでいます。 CFURLEnumeratorとNSDirectoryEnumeratorの両方がこれを行いますが、どちらを使うかは決めることができません。両者のスピードの違いはありますか?ディレクトリの内容をマッピングするには、CFURLEnumeratorとNSDirectoryEnumeratorの違いはありますか?

誰でもこれを経験していただければ幸いです。

答えて

3

ディスクからディレクトリ構造を読み取らなければならないという事実によって、スピードの違いに悩まされると思います。 CocoaはCore Foundationよりも扱いが簡単だから、いつもNS-バージョンを使っています。

+0

あなたは 'NSTask'を使って' find'を呼び出す方が良いと思いますか? – newenglander

+0

@newenglander No.これは、全く新しいプロセスを作成する追加のオーバーヘッドがあります。 – JeremyP

1

NSDirectoryEnumeratorCFURLEnumeratorを使用しているため、パフォーマンスにはほとんど違いがありません。

CFURLEnumeratorは、ココアAPIによって公開されていない2つの列挙子オプション - kCFURLEnumeratorIncludeDirectoriesPreOrderkCFURLEnumeratorIncludeDirectoriesPostOrderを提供します。これらのオプションは、再帰的列挙中にディレクトリがいつ返されるかを制御する必要がある場合に便利です。たとえば、CFURLEnumeratorを使用してディレクトリ階層の内容を列挙して削除する場合は、ディレクトリを削除しての後にディレクトリの子孫を削除する必要があります。 kCFURLEnumeratorIncludeDirectoriesPostOrderオプションを使用すると、その子孫のすべてを見た後でディレクトリURLを見ることができます。

関連する問題