管理文件与目录:NSFileManager
1、路径名是唯一的标识
2、每一个路径名都是一个 NSString对象
3、目录分为1.相对目录,2绝对目录(以’/‘开头)
4、~为主目录的缩写
1-NSFileManager 使用文件的方法
1.创建:
想一个文件写入数据(相当于创建一个文件)
方法:- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary *)attributes
- //如果需要,首先创建输出文件 (内容为空)
- // NSFileHandle 类并不能创建文件,必须使用 NSFileManager 类中得 createFileAtPath 方法建立一个文件
- [[NSFileManagerdefaultManager] createFileAtPath: @"outtest"contents: nilattributes:nil];
- outFile = [NSFileHandlefileHandleForWritingAtPath: @"ouTtest"];
-
- if (outFile == nil){
- NSLog(@"Open of test out for wring failed");
- return 2;
- }
复制代码
//已经存在名为 testfile的文件,使用的路径为相对目录
- NSFileManager *fm
- NSString *fName = @“testFile”;
- fm = [NSFileManager defaultManager];
复制代码
2.获取当前目录
- NSString *contents;
- //获取当前目录的绝对路径
- contents = [fm currentDirectoryPath];
- NSLog(@"%@", contents);
复制代码
3.复制新文件(to 不能是已经存在的文件)
- if ([fm copyItemAtPath: fName toPath: @"newTest" error: NULL] == YES){
- NSLog(@"File copy failed!”);
- }
复制代码
4.重命名新副本(to 可以是已经存在的,不过仅仅是从重新命名这个存在的副本而已)
方法:moveItemAtPath:toPath:也可以将文件从一个目录移动到另一个目录(也可以将一个目录a,移动到其他目录中)。
- if ([fmmoveItemAtPath:@"newTest"toPath:@"~testfile111"error:NULL] ==NO)
- NSLog(@"File rename failed”);
复制代码
5.获取文件的信息(文件大小、创建日期等等)、
方法:attributesOfItemAtPath:error: 会返回一个NSDictionnary对象,通过使用相对应的 键(如:NSFileSize)获取文件的相关信息
NSDictionary * attr;
//获取newTest的信息
- if ((attr = [fmattributesOfItemAtPath:@"newTest" error:NULL]) ==nil){
- NSLog(@"fialed to get infomation");
- }
- NSLog(@"creat time :%@", attr[NSFileSize] );
- NSLog(@"creat time :%llu", [attr[NSFileSize]unsignedLongLongValue]);
复制代码
- if ((attr = [fmattributesOfItemAtPath:@"newTest" error:NULL]) ==nil){
- NSLog(@"fialed to get infomation");
- }
- NSLog(@"creat time :%@", attr[NSFileSize] );
复制代码
NSLog(@"creat time :%llu", [attr[NSFileSize]unsignedLongLongValue]);
2-NSFileManager 使用目录的方法
1.目录的建立:
- NSFileManager *fm;
- NSEnumerator *dirEnum;
- //创建文件管理器的实例
- fm = [NSFileManagerdefaultManager];
- //获取当前目录 (生成了一个副本)
- path = [fm currentDirectoryPath];
- NSLog(@"current director path is:%@", path);
复制代码
2.创新的目录:
- //更改对象当前默认目录,并且显示最新的当前工作目录
-
- if ([fm changeCurrentDirectoryPath: @"Newdirectory"] == YES){
- path = [fm currentDirectoryPath];
-
- NSLog(@"%@",path);
- //NSLog(@"change dirctory fail");
- }
复制代码
4.重命名新的目录:可以用来将整个目录结构(包括目录的内容)从文件系统的一个位置移动到另一个位置。(不能有相同名称的目录)
- //重命名目录
- //可以用来将整个目录结构(包括目录的内容)从文件系统的一个位置移动到另一个位置。(不能有相同名称的目录)
- if ([fm moveItemAtPath: dirName toPath: @"Newdirectory/test1"error: NULL] == NO){
- NSLog(@" Directory rename failed!");
- //return 3;
- }
复制代码
5.更改对象默认目录,并显示最新的当前目录
- //更改对象当前默认目录,并且显示最新的当前工作目录
-
- if ([fm changeCurrentDirectoryPath: @"Newdirectory"] == YES){
- path = [fm currentDirectoryPath];
-
- NSLog(@"%@",path);
- //NSLog(@"change dirctory fail");
- }
复制代码
5.枚举目录中的内容:
/枚举目录- dirEnum = [fm enumeratorAtPath:path];
- // NSLog(@"Hello, World!");
- while ( (path = [dirEnum nextObject]) != nil){
- // NSLog(@"%@", path);
- }
-
- //另一种枚举目录的方法
- DrctArray = [fm contentsOfDirectoryAtPath: [fm currentDirectoryPath] error: NULL];
- // NSLog(@"%@",DrctArray); 直接通过显示数组来显示
- for (path in DrctArray){
- NSLog(@"%@",path);
- }
- NSLog(@"Hello, World!");
- }
复制代码
以下为NSFileManager的完整示例代码:
- //
- // main.m
- // 16-3
- //
- // Created by 高冠东 on 15/7/20.
- // Copyright (c) 2015年高冠东. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- int main(int argc, constchar * argv[]) {
- @autoreleasepool {
- NSString *dirName = @"Newdirectory/test";
- NSString *path;
- NSFileManager *fm;
- NSEnumerator *dirEnum;
- NSArray *DrctArray;
- //创建文件管理器的实例
- fm = [NSFileManagerdefaultManager];
- //获取当前目录 (生成了一个副本)
- path = [fm currentDirectoryPath];
- NSLog(@"current director path is:%@", path);
-
- //创建一个新的目录
- if ([fm createDirectoryAtPath: dirName withIntermediateDirectories: YESattributes:nilerror:NULL] == YES){
- NSLog(@"creatDirectory success");
- }
- //重命名目录
- //可以用来将整个目录结构(包括目录的内容)从文件系统的一个位置移动到另一个位置。(不能有相同名称的目录)
- if ([fm moveItemAtPath: dirName toPath: @"Newdirectory/test1"error: NULL] == NO){
- NSLog(@" Directory rename failed!");
- //return 3;
- }
-
- //更改对象当前默认目录,并且显示最新的当前工作目录
-
- if ([fm changeCurrentDirectoryPath: @"Newdirectory"] == YES){
- path = [fm currentDirectoryPath];
-
- NSLog(@"%@",path);
- //NSLog(@"change dirctory fail");
- }
- //枚举目录
- dirEnum = [fm enumeratorAtPath:path];
- // NSLog(@"Hello, World!");
- while ( (path = [dirEnum nextObject]) != nil){
- // NSLog(@"%@", path);
- }
-
- //另一种枚举目录的方法
- DrctArray = [fm contentsOfDirectoryAtPath: [fm currentDirectoryPath] error: NULL];
- // NSLog(@"%@",DrctArray); 直接通过显示数组来显示
- for (path in DrctArray){
- NSLog(@"%@",path);
- }
- NSLog(@"Hello, World!");
- }
-
- return0;
- }
复制代码