OC文件管理:3-枚举目录中的内容
查看某个文件夹中的文件列表,在文件操作中是被高频使用的,在DOS中我们可以使用DIR命令,在Linux中可以使用ls命令,在iOS开发中,我们可以使用enumeratorAtPath:方法以及contentsOfDirectoryAtPath:方法,这两个方法都可以完成对指定目录的文件列表枚举,但使用中稍有差别。
enumeratorAtPath:方法
当使用enumeratorAtPath:时,一次可以枚举指定目录中的所有文件,包括子目录中的文件。该方法的返回值类型为一个NSDirectoryEnumerator类型的对象,可以使用nextObject方法来取出其中的值。
- (nullable NSDirectoryEnumerator<NSString *> *)enumeratorAtPath:(NSString *)path;
示例代码:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSFileManager *fm = [NSFileManager defaultManager];
//变更当前目录到桌面Desktop
NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDesktopDirectory, NSUserDomainMask, YES);
NSString * desktopPath = [paths objectAtIndex:0];
[fm changeCurrentDirectoryPath:desktopPath];
//使用enumeratorAtPath
NSDirectoryEnumerator *dirEnum = [fm enumeratorAtPath:desktopPath];
NSString *path;
while ((path = [dirEnum nextObject]) != nil) {
NSLog(@"%@",path);
}
}
return 0;
}
运行结果如下,可以看到子目录中的文件也被列举出来了。
contentsOfDirectoryAtPath:方法
当使用contentsOfDirectoryAtPath:方法时,也可以列出当前目录中的文件和文件夹名称,但子文件夹中的内容并不显示。该方法的返回值是一个NSArray类型的数组,因此可以使用forin循环来遍历其中的对象。
- (nullable NSArray<NSString *> *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
示例代码:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSFileManager *fm = [NSFileManager defaultManager];
//变更当前目录到桌面Desktop
NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDesktopDirectory, NSUserDomainMask, YES);
NSString * desktopPath = [paths objectAtIndex:0];
[fm changeCurrentDirectoryPath:desktopPath];
//获取目录中的文件以及子目录名称
NSArray *dirArray = [fm contentsOfDirectoryAtPath:desktopPath error:nil];
//遍历打印目录
NSString *path;
for (path in dirArray) {
NSLog(@"%@",path);
}
}
return 0;
}
运行结果如下,对比上面使用enumeratorAtPath:方法的代码,可以看到子目录中的文件并不显示。
示例代码
https://github.com/99ios/4.7.3