2012-05-26 253 views
0

我想删除包含子字符串的多个文件。举例来说,我想删除所有具有子字符串my的文件。假设我的目录包含4个文件:photo.jpgmyPhoto.jpgbeachMyPhoto.jpganyPhoto.jpg,因为搜索的词是my我感兴趣删除文件myPhoto .jpgbeachMyPhoto.jpg(不区分大小写)。删除多个包含子字符串名称的文件

我建议的解决方案(我知道该怎么做)是使用NSFileManager类,并使用函数contentsOfDirectoryAtPath:error:来读取所有目录内容,然后通过循环搜索命中。如果找到命中我删除该文件。

我建议的解决方案中不喜欢的是,如果目录中包含的文件过多且命中数很少,则效率不高。有没有更有效的方法来做到这一点?

+0

你可以使用block方法indexesOfObjectsPassingTest,但我不知道这是否比你自己的循环更快 - 它也必须在内部做一些循环 – rdelmar

+1

可能是这方面的东西:http:// stackoverflow.com/questions/499673/getting-a-list-of-files-in-a-directory-with-a-glob – iTukker

回答

1

如果您不想将大数组加载到内存中,则可以尝试-[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:]。由于您只需要该目录的直接内容,因此您将为其返回的每个目录调用-[NSDirectoryEnumerator skipDescendants]

如果您关心的是遍历目录中的所有项目,测试您的匹配模式,这是不可避免的。你希望使用的任何技术都要以某种方式遍历目录中的所有项目并测试匹配。唯一的问题是这个迭代是否暴露给你。在可可,它是。如果你想要一个替代方案,你可以下降到glob()函数。

相关问题