免费开源的iOS开发学习平台

OC文件管理:2-NSFileManager类:目录操作

NSFileManager类也提供了用于处理目录的一些方法,这些方法与处理普通文件的方法类似。

获取与变更当前目录

像我们在操作系统中对文件操作类似,我们经常需要获取当前所在的目录,并且可以通过前进/后退等操作来改变当前的操作目录。在NSFileManager类中也提供了获取与变更当前目录的方法。

  • 获取当前目录
@property (readonly, copy) NSString *currentDirectoryPath;
  • 变更当前目录
- (BOOL)changeCurrentDirectoryPath:(NSString *)path;

下方的示例代码中,演示了如何获取当前目录以及对当前目录进行修改变更。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSFileManager *fm = [NSFileManager defaultManager];
        //获取当前目录
        NSString *path = [fm currentDirectoryPath];
        NSLog(@"初始状态下的当前目录: <%@>",path);
        //变更当前目录
        NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDesktopDirectory, NSUserDomainMask, YES);
        NSString * desktopPath = [paths objectAtIndex:0];
        [fm changeCurrentDirectoryPath:desktopPath];
        //检查当前目录
        NSString *newpath = [fm currentDirectoryPath];
        NSLog(@"变更后的当前目录: <%@>",newpath);
    }
    return 0;
}

运行结果如下。我们可以发现,初始状态时,当前操作的默认目录指向程序的调试目录。

目录的创建、重命名与删除

与创建文件类似,目录也可以进行创建,同时可以对目录进行移动、重命名以及删除,在NSFileManager类中也提供了对应的方法。

  • 创建目录
- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary<NSString *, id> *)attributes error:(NSError **)error;

  • 重命名/移动目录
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error;

  • 删除目录
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error;

下方的示例代码,展示了对一个目录进行创建、重命名以及删除三个操作。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSFileManager *fm = [NSFileManager defaultManager];
        //获取当前目录
        NSString *path = [fm currentDirectoryPath];
        NSLog(@"初始状态下的当前目录: <%@>",path);
        //创建目录
        NSString *myfolderPath = [path stringByAppendingPathComponent:@"myfolder"];
        if ([fm createDirectoryAtPath:myfolderPath withIntermediateDirectories:YES attributes:nil error:nil]) {
            NSLog(@"目录创建成功!");
        }
        //重命名与移动目录
        NSString *myfolderNEWPath = [path stringByAppendingPathComponent:@"myNEWfolder"];
        if ([fm moveItemAtPath:myfolderPath toPath:myfolderNEWPath error:nil]) {
            NSLog(@"目录重命名成功");
        }
        //目录删除
        if ([fm removeItemAtPath:myfolderNEWPath error:nil]) {
            NSLog(@"目录删除成功");
        }
    }
    return 0;
}

运行结果:

示例代码

https://github.com/99ios/4.7.2