我有一个文件夹结构中的元素列表:
我的目标是遍历结构以构建与我的文件名匹配的文件数组,但是数组中项目的第一次出现将是最接近文件夹根目录的文件。
我被告知广度优先遍历,但我感到困惑。
我开始采用这种方法,但结果并不能满足我的需要......我将不胜感激任何帮助!
NSMutableArray * directories = [NSMutableArray new];
NSDirectoryEnumerator *enumerator = [[[NSFileManager defaultManager] enumeratorAtPath:url] retain] ;
if( [[filePath lastPathComponent] isEqualToString:@"myfile.pdf"] ){
[directories addObject:[url stringByAppendingString:filePath]];
}
if(directories)
sourceUrl_ = [[NSURL fileURLWithPath:[directoriesToWalk objectAtIndex:0] ] retain];
答案 0 :(得分:2)
以下是您所描述内容的实例:
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager]
enumeratorAtPath:@"/Users/bdesham/Sites"];
NSMutableArray *htmlFiles = [NSMutableArray new];
NSURL *path;
while (path = [enumerator nextObject]) {
if ([[path lastPathComponent] isEqualToString:@"index.html"]) {
[htmlFiles addObject:@{ @"level" : [NSNumber numberWithInteger:[enumerator level]],
@"path" : path }];
}
}
[htmlFiles sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1[@"level"] integerValue] > [obj2[@"level"] integerValue];
}];
NSMutableArray *paths = [NSMutableArray arrayWithCapacity:[htmlFiles count]];
[htmlFiles enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[paths addObject:obj[@"path"]];
}];
这里的想法如下:
htmlFiles
数组中。该文件被添加为字典,以便我们可以存储深度(调用-[NSDirectoryEnumerator level]
的结果)以及每个文件名。@"level"
键)对数组进行排序。在这段代码的末尾,paths
数组包含名为“index.html”的所有文件的NSURL
,其中文件最接近根,最远的文件是根最后。 (请注意,在同一目录级别的两个文件的数组中的排序是未定义的。)