NSFileManager (文件管理器 读、写操作)


  • Documents
    Apple官方建议将程序中建立的或程序浏览的文件数据都保存在Documents目录里,iTunes备份数据时或恢复数据时,会备份或恢复此目录;

  • Library
    主要存储的是默认的设置或其它的状态信息。包含以下两个文件夹:
    • Caches
      存储缓存文件,存储应用程序再次启动所需的,itunes不会备份该目录;
    • Preferences
      存储应用程序偏好设置文件,一般不修改这里存放的文件;

  • tmp
    提供的是一个存储临时文件的地方。iPhone一旦重启tmp目录下的内容就会被清空。

iphone沙盒(sandbox)中的几个目录获取方式:
  1. // 获取沙盒主目录路径
  2. NSString *homeDir = NSHomeDirectory();
  3. // 获取Documents目录路径
  4. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  5. NSString *docDir = [paths objectAtIndex:0];
  6. // 获取Caches目录路径
  7. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  8. NSString *cachesDir = [paths objectAtIndex:0];
  9. // 获取tmp目录路径
  10. NSString *tmpDir = NSTemporaryDirectory();
  1. // 获取当前程序包中一个图片资源(apple.png)路径
  2. NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"];
  3. UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];

例子:

NSFileManager* fm=[NSFileManager defaultManager];
if(![fm fileExistsAtPath:[self dataFilePath]]){

//下面是对该文件进行制定路径保存
[fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];

//取得一个目录下得所有文件名
NSArray *files = [fm subpathsAtPath: [self dataFilePath] ];

//读取某个文件
NSData *data = [fm contentsAtPath:[self dataFilePath]];

//或者
NSData *data = [NSData dataWithContentOfPath:[self dataFilePath]];
}

 

IOS管理文件和目录

1、常见的NSFileManager文件方法

-(NSData *)contentsAtPath:path  //从一个文件读取数据

-(BOOL)createFileAtPath: path contents:(NSData *)data attributes:attr  //向一个文件写入数据

-(BOOL)removeItemAtPath:path error:err  //删除一个文件

-(BOOL)moveItemAtPath:from toPath:to error:err  //重命名或者移动一个文件(to不能是已存在的)

-(BOOL)copyItemAtPath:from toPath:to error:err  //复制文件(to不能是已存在的)

-(BOOL)contentsEqualAtPath:path andPath:path2  //比较两个文件的内容

-(BOOL)fileExistAtPath:path  //测试文件是否存在

-(BOOL)isReadableFileAtPath:path  //测试文件是否存在,并且是否能执行读操作  

-(BOOL)isWriteableFileAtPath:path  //测试文件是否存在,并且是否能执行写操作  

-(NSDictionary *)attributesOfItemAtPath:path error:err  //获取文件的属性  

-(BOOL)setAttributesOfItemAtPath:attr error:err  //更改文件的属性

2.使用目录

-(NSString *)currentDirectoryPath  //获取当前目录

-(BOOL)changeCurrentDirectoryPath:path  //更改当前目录

-(BOOL)copyItemAtPath:from toPath:to error:err  //复制目录结构(to不能是已存在的)

-(BOOL)createDirectoryAtPath:path withIntermediateDirectories:(BOOL)flag attribute:attr  //创建一个新目录

-(BOOL)fileExistAtPath:path isDirectory:(BOOL*)flag  //测试文件是不是目录(flag中储存结果YES/NO)

-(NSArray *)contentsOfDirectoryAtPath:path error:err  //列出目录内容

-(NSDirectoryEnumerator *)enumeratorAtPath:path  //枚举目录的内容

-(BOOL)removeItemAtPath:path error:err  //删除空目录

-(BOOL)moveItemAtPath:from toPath:to error:err   //重命名或移动一个目录(to不能是已存在的)

3、常用路径工具方法

+(NSString *)pathWithComponens:components  //根据components中的元素构造有效路径

-(NSArray *)pathComponents  //析构路径,获得组成此路径的各个部分

-(NSString *)lastPathComponent  //提取路径的最后一个组成部分

-(NSString *)pathExtension  //从路径的最后一个组成部分中提取其扩展名

-(NSString *)stringByAppendingPathComponent:path  //将path添加到现有路径的末尾

-(NSString *)stringByAppendingPathExtension:ext  //将指定的扩展名添加到路径的最后一个组成部分

-(NSString *)stringByDeletingLastPathComponent  //删除路径的最后一个组成部分

-(NSString *)stringByDeletingPathExtension  //从文件的最后一部分删除扩展名

-(NSString *)stringByExpandingTileInPath   //将路径中代字符扩展成用户主目录(~)或指定用户的主目录(~user)

-(NSString *)stringByresolvingSymlinksInPath  //尝试解析路径中的符号链接

-(NSString *)stringByStandardizingPath  //通过尝试解析~、..(父目录符号)、.(当前目录符号)和符号链接来标准化路径

4、常用的路径工具函数

NSString* NSUserName(void)  //返回当前用户的登录名

NSString* NSFullUserName(void)  //返回当前用户的完整用户名

NSString* NSHomeDirectory(void)  //返回当前用户主目录的路径

NSString* NSHomeDirectoryForUser(NSString* user)  //返回用户user的主目录

NSString* NSTemporaryDirectory(void)  //返回可用于创建临时文件的路径目录

5、常用的IOS目录

Documents(NSDocumentDirectory)  //用于写入应用相关数据文件的目录,在ios中写入这里的文件能够与iTunes共享并访问,存储在这里的文件会自动备份到云端

Library/Caches(NSCachesDirectory)  //用于写入应用支持文件的目录,保存应用程序再次启动需要的信息。iTunes不会对这个目录的内容进行备份

tmp(use NSTemporaryDirectory())  //这个目录用于存放临时文件,只程序终止时需要移除这些文件,当应用程序不再需要这些临时文件时,应该将其从这个目录中删除

Library/Preferences  //这个目录包含应用程序的偏好设置文件,使用 NSUserDefault类进行偏好设置文件的创建、读取和修改

(以上转自网络)


//文件管理器初始化
    NSFileManager* fileManager = [NSFileManager defaultManager];
    NSError *erro;
    
    
    
    //自定义文件目录
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //~/Library/Documentation
    NSString *newPath = [path stringByAppendingPathComponent:@"newPath"];
    NSString *toPath = [path stringByAppendingPathComponent:@"seconPath"];
    
    //~/Documents (iTunes备份目录)
//    NSString *newPath2 = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"newPath"];
    
    
    
    
    //创建新的文件目录,拼接到沙盒目录下
    BOOL bo = [[NSFileManager defaultManager] createDirectoryAtPath:newPath withIntermediateDirectories:YES attributes:nil error:&erro];
    
//    BOOL bo2 = [[NSFileManager defaultManager] createDirectoryAtPath:toPath withIntermediateDirectories:YES attributes:nil error:&erro];
    
    
    //如果成功创建目录,则写入文件
    UIImage *img = [UIImage imageNamed:@"001"];
    if (bo)
    {
        BOOL b = [UIImagePNGRepresentation(img) writeToFile:[newPath stringByAppendingPathComponent:@"save.png"] atomically:YES];
        
        
    }
    
    
    
    //移动目录
    //以重命名方式 移动文件夹,前提是新的路径没有相同名称的文件目录
    [fileManager moveItemAtPath:newPath toPath:toPath error:&erro];
    
    
    
    
    //复制A路径文件 到 B文件夹
//    [fileManager copyItemAtPath:[newPath stringByAppendingPathComponent:@"save.png"] toPath:[toPath stringByAppendingPathComponent:@"save.png"] error:&erro];
    
    
    
    
    //移动文件
//    [fileManager moveItemAtPath:[newPath stringByAppendingPathComponent:@"save.png"] toPath:[toPath stringByAppendingPathComponent:@"save.png"] error:&erro];
    
    
    
    
    
    
    //- (nullable NSArray<NSString *> *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
    //获取指定目录下的所有文件路径,返回path数组
    NSString* pathStr = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"imageBundle"];
    NSLog(@"%@",pathStr);
    NSString* pathStr2 = [[[NSBundle mainBundle]bundlePath]stringByAppendingPathComponent:@"imageBundle"];

    
    
    
    
    
    
    //- (nullable NSArray<NSString *> *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
    //获取目录下所有文件名 ~/save.png ~
    NSArray* owefilePath = [fileManager contentsOfDirectoryAtPath:newPath error:&erro];
    for (NSString *fileName in owefilePath) {
        //完整文件路径
        NSLog(@"filePath==%@\r\n",[newPath stringByAppendingPathComponent:fileName]);
        UIImage *oweImg = [UIImage imageWithContentsOfFile:[newPath stringByAppendingPathComponent:fileName]];

    }
    
    
    
    //- (nullable NSArray<NSString *> *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
    //沙盒目录下的所有子目录,包括自定义的新建文件夹 newPath、 newPath/save.png 图片路径
    NSArray* subfilePath = [fileManager subpathsOfDirectoryAtPath:path error:&erro];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值