0

サブストリングを含む複数のファイルを削除したいのですが。たとえば、部分文字列を持つすべてのファイルを削除したいとしますmy。私のディレクトリに4つのファイルが含まれていると仮定します:photo.jpgmyPhoto.jpgbeachMyPhoto.jpganyPhoto.jpg、検索用語はmy削除したいファイルであるため、myPhoto.jpgbeachMyPhoto.jpg(大文字と小文字は区別されません) 。

私が提案する解決策(私はその方法を知っています)は、NSFileManagerクラスを使用し、関数を使用してcontentsOfDirectoryAtPath:error:すべてのディレクトリコンテンツを読み取り、ループでヒットを検索することです。ヒットが見つかった場合は、そのファイルを削除します。

私が提案したソリューションで気に入らないのは、特にディレクトリに含まれるファイルが多すぎてヒット数が少ない場合は、それほど効率的ではないということです。これを行うためのより効率的な方法はありますか?

4

1 に答える 1

1

大きな配列をメモリにロードしたくない場合は、を試すことができます-[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:]。ディレクトリの直接の内容のみが必要なため、-[NSDirectoryEnumerator skipDescendants]ディレクトリが返すディレクトリごとに呼び出します。

ディレクトリ内のすべてのアイテムを繰り返し処理し、一致パターンをテストすることが懸念される場合は、それは避けられません。使用したいテクニックは、ディレクトリ内のすべてのアイテムを何とか繰り返して、一致するかどうかをテストする必要があります。唯一の問題は、その反復があなたに公開されているかどうかです。ココアではそうです。glob()そうでない代替手段が必要な場合は、関数にドロップダウンできます。

于 2012-05-27T08:59:03.680 に答える