黑马程序员技术交流社区

标题: 使用文件 [打印本页]

作者: wdcew    时间: 2015-8-18 23:07
标题: 使用文件
本帖最后由 wdcew 于 2015-8-18 23:12 编辑

管理文件与目录:NSFileManager
1、路径名是唯一的标识
2、每一个路径名都是一个 NSString对象
3、目录分为1.相对目录,2绝对目录(以’/‘开头)
4、~为主目录的缩写
1-NSFileManager 使用文件的方法
1.创建:
想一个文件写入数据(相当于创建一个文件)
方法:- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary *)attributes
  1.         //如果需要,首先创建输出文件 (内容为空)
  2.         // NSFileHandle 类并不能创建文件,必须使用 NSFileManager 类中得 createFileAtPath 方法建立一个文件
  3.         [[NSFileManagerdefaultManager] createFileAtPath: @"outtest"contents: nilattributes:nil];

  4.         outFile = [NSFileHandlefileHandleForWritingAtPath: @"ouTtest"];
  5.         
  6.         if (outFile == nil){
  7.             NSLog(@"Open of test out for wring failed");
  8.             return  2;
  9.         }
复制代码




//已经存在名为 testfile的文件,使用的路径为相对目录

  1. NSFileManager *fm     
  2. NSString *fName = @“testFile”;
  3.      fm = [NSFileManager defaultManager];
复制代码


2.获取当前目录

  1.       NSString *contents;
  2. //获取当前目录的绝对路径
  3.       contents = [fm currentDirectoryPath];
  4.       NSLog(@"%@", contents);
复制代码


3.复制新文件(to 不能是已经存在的文件)
  1. if ([fm copyItemAtPath: fName toPath: @"newTest" error: NULL] == YES){
  2.           NSLog(@"File copy failed!”);
  3. }
复制代码

4.重命名新副本(to 可以是已经存在的,不过仅仅是从重新命名这个存在的副本而已)
方法:moveItemAtPath:toPath:也可以将文件从一个目录移动到另一个目录(也可以将一个目录a,移动到其他目录中)。

  1. if ([fmmoveItemAtPath:@"newTest"toPath:@"~testfile111"error:NULL] ==NO)
  2.           NSLog(@"File rename failed”);
复制代码


5.获取文件的信息(文件大小、创建日期等等)、
方法:attributesOfItemAtPath:error: 会返回一个NSDictionnary对象,通过使用相对应的 键(如:NSFileSize)获取文件的相关信息
NSDictionary * attr;
      //获取newTest的信息
  1. if ((attr = [fmattributesOfItemAtPath:@"newTest" error:NULL]) ==nil){
  2. NSLog(@"fialed to get infomation");
  3. }
  4. NSLog(@"creat time :%@", attr[NSFileSize] );   
  5. NSLog(@"creat time :%llu", [attr[NSFileSize]unsignedLongLongValue]);
复制代码

  1. if ((attr = [fmattributesOfItemAtPath:@"newTest" error:NULL]) ==nil){
  2. NSLog(@"fialed to get infomation");
  3. }
  4. NSLog(@"creat time :%@", attr[NSFileSize] );   
复制代码

NSLog(@"creat time :%llu", [attr[NSFileSize]unsignedLongLongValue]);
2-NSFileManager 使用目录的方法
1.目录的建立:

  1.       NSFileManager *fm;
  2.         NSEnumerator *dirEnum;
  3.        //创建文件管理器的实例
  4.         fm = [NSFileManagerdefaultManager];
  5.         //获取当前目录 (生成了一个副本)
  6.         path = [fm currentDirectoryPath];
  7.         NSLog(@"current director path is:%@", path);
复制代码

2.创新的目录:
  1.         //更改对象当前默认目录,并且显示最新的当前工作目录
  2.         
  3.         if ([fm changeCurrentDirectoryPath: @"Newdirectory"] == YES){
  4.             path = [fm currentDirectoryPath];
  5.         
  6.             NSLog(@"%@",path);
  7.             //NSLog(@"change dirctory  fail");

  8.         }
复制代码


4.重命名新的目录:可以用来将整个目录结构(包括目录的内容)从文件系统的一个位置移动到另一个位置。(不能有相同名称的目录)
  1.         //重命名目录
  2.         //可以用来将整个目录结构(包括目录的内容)从文件系统的一个位置移动到另一个位置。(不能有相同名称的目录)
  3.         if ([fm moveItemAtPath: dirName toPath: @"Newdirectory/test1"error: NULL] == NO){
  4.             NSLog(@" Directory rename failed!");
  5.             //return  3;
  6.         }
复制代码


5.更改对象默认目录,并显示最新的当前目录

  1.   //更改对象当前默认目录,并且显示最新的当前工作目录
  2.         
  3.         if ([fm changeCurrentDirectoryPath: @"Newdirectory"] == YES){
  4.             path = [fm currentDirectoryPath];
  5.         
  6.             NSLog(@"%@",path);
  7.             //NSLog(@"change dirctory  fail");

  8.         }
复制代码




5.枚举目录中的内容:
/枚举目录
  1.         dirEnum = [fm enumeratorAtPath:path];
  2.       //  NSLog(@"Hello, World!");
  3.         while ( (path = [dirEnum nextObject]) != nil){
  4.            // NSLog(@"%@", path);
  5.         }
  6.         
  7.         //另一种枚举目录的方法
  8.         DrctArray = [fm contentsOfDirectoryAtPath: [fm currentDirectoryPath] error: NULL];
  9.          // NSLog(@"%@",DrctArray); 直接通过显示数组来显示
  10.         for (path in DrctArray){
  11.             NSLog(@"%@",path);
  12.         }
  13.         NSLog(@"Hello, World!");
  14.     }
复制代码


以下为NSFileManager的完整示例代码:

  1. //
  2. //  main.m
  3. //  16-3
  4. //
  5. //  Created by 高冠东 on 15/7/20.
  6. //  Copyright (c) 2015年高冠东. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>

  9. int main(int argc, constchar * argv[]) {
  10.     @autoreleasepool {
  11.         NSString *dirName = @"Newdirectory/test";
  12.         NSString *path;
  13.         NSFileManager *fm;
  14.         NSEnumerator *dirEnum;
  15.         NSArray *DrctArray;
  16.         //创建文件管理器的实例
  17.         fm = [NSFileManagerdefaultManager];
  18.         //获取当前目录 (生成了一个副本)
  19.         path = [fm currentDirectoryPath];
  20.         NSLog(@"current director path is:%@", path);
  21.         
  22.         //创建一个新的目录
  23.         if ([fm createDirectoryAtPath: dirName withIntermediateDirectories: YESattributes:nilerror:NULL] == YES){
  24.             NSLog(@"creatDirectory success");
  25.         }
  26.         //重命名目录
  27.         //可以用来将整个目录结构(包括目录的内容)从文件系统的一个位置移动到另一个位置。(不能有相同名称的目录)
  28.         if ([fm moveItemAtPath: dirName toPath: @"Newdirectory/test1"error: NULL] == NO){
  29.             NSLog(@" Directory rename failed!");
  30.             //return  3;
  31.         }
  32.         
  33.         //更改对象当前默认目录,并且显示最新的当前工作目录
  34.         
  35.         if ([fm changeCurrentDirectoryPath: @"Newdirectory"] == YES){
  36.             path = [fm currentDirectoryPath];
  37.         
  38.             NSLog(@"%@",path);
  39.             //NSLog(@"change dirctory  fail");

  40.         }
  41.         //枚举目录
  42.         dirEnum = [fm enumeratorAtPath:path];
  43.       //  NSLog(@"Hello, World!");
  44.         while ( (path = [dirEnum nextObject]) != nil){
  45.            // NSLog(@"%@", path);
  46.         }
  47.         
  48.         //另一种枚举目录的方法
  49.         DrctArray = [fm contentsOfDirectoryAtPath: [fm currentDirectoryPath] error: NULL];
  50.          // NSLog(@"%@",DrctArray); 直接通过显示数组来显示
  51.         for (path in DrctArray){
  52.             NSLog(@"%@",path);
  53.         }
  54.         NSLog(@"Hello, World!");
  55.     }
  56.    
  57.     return0;
  58. }
复制代码









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2