Objective-C之NSFileHandle和NSFileManager

NSFileManager(管理文件和目录)类主要功能:

1、创建一个新的文件;

2、从现有文件中读取数据;

3、将数据写入文件中;

4、对文件进行删除、复制、重命名的操作;

5、测试文件是否存在;

6、测试两个文件的内容是否相同;

7、确定文件的大小和其他属性。

常见的NSFileManager文件方法:

    NSString *fName = @"testfile";

    NSFileManager *fm;

    NSDictionary *attr;

    //创建文件管理器的实例;

    fm = [NSFileManager defaultManager];

    if ([fm fileExistsAtPath:fName] == NO) {//确认测试文件是否存在;

        NSLog(@"File doesn't exist");

    }

    //创建一个副本,to后面的是新创建的副本,其本身一定要是 不存在的;

    if ([fm copyItemAtPath:fName toPath:@"newfile" error:NULL] == NO) {

        NSLog(@"File Copy failed");

    }

    //比较两个文件的内容是否一样

    if ([fm contentsEqualAtPath:fName andPath:@"newfile"] == NO) {

        NSLog(@"File are Not Equal!");

    }

    //重命名或者移动文件,to后面的文件一定是之前不存在的;这个方法可以用来讲文件从一个目录移动到另外一个目录上(也可以移动整个目录)如果两个路径引用同一个目录中的文件,其结果仅仅是重新命名这个文件;

    if ([fm moveItemAtPath:@"newfile" toPath:@"newfile2" error:NULL] == NO) {

        NSLog(@"File rename failed");

    }

    //获取newfile2的大小;

    if ((attr = [fm attributesOfItemAtPath:@"newfile2" error:NULL]) ==nil) {

        NSLog(@"could't get file attributes");

    }

    if ([fm removeItemAtPath:fName error:NULL] ==NO) {//最后删除原始文件;

        NSLog(@"file remove failed");

        

    }

 结果:

File doesn't exist

File Copy failed

File are Not Equal!

File rename failed

could't get file attributes

File size is 0 bytes

file remove failed

 

NSFileHandle类主要功能:

1、打开现有的文件,对文件的内容进行读、写或更新(读取和写入)操作;

2、再文件中查找指定位置;

3、从文件中读取特定数目的字节,或将制定数目的字节写入文件内。

NSFileHandle处理文件的步骤

1:创建一个NSFileHandle对象

2:对打开的文件进行I/O操作

3:关闭文件对象操作

 

NSFileHandle的基本用法:

@property (readonly, copy) NSData *availableData;//可用的数据

@property (readonly) unsigned long long offsetInFile;当前文件的偏移量 

- (NSData *)readDataToEndOfFile; 从当前的节点读到文件末尾,最多是(NINT_MAX个字节);

- (NSData *)readDataOfLength:(NSUInteger)length;从当前节点开始读取指定的长度数据;

- (void)writeData:(NSData *)data;写入数据;

- (unsigned long long)seekToEndOfFile;跳到文件末尾

- (void)seekToFileOffset:(unsigned long long)offset;跳到指定文件的指定的偏移量的位置;

- (void)synchronizeFile;同步文件

- (void)closeFile; //关闭文件

- (void)truncateFileAtOffset:(unsigned long long)offset; //设置文件长度

+ (id)fileHandleForReadingAtPath:(NSString *)path; //打开一个文件准备读取

+ (id)fileHandleForWritingAtPath:(NSString *)path; //打开一个文件准备写入

+ (id)fileHandleForUpdatingAtPath:(NSString *)path; //打开一个文件可以更新(读取,写入)

 

 

补充说明:

a:NSFileHandle只能打开现成的文件,所以如果是新文件则需要NSFileManager先创建新文件;

b:打开一个文件就后,就需要关闭一个文件;

c:根据不同的要求可能要设定不同的偏移量(即光标所在位置),可以通过移动到开头或结尾,也可以先获取当前位置然后增加和减少多少字节来移动;

d:文件路径是NSString对象,可以用 stringByAppendingPathComponent+文件全称 方法构造一个完整的文件路径; 

e:往文件里面写的内容是NSData,如果是其他的格式则可以用 dataUsingEncoding : NSUTF8StringEncoding 来转化成data类型;

f:同样,目录的写法于Linux类似,~家目录,/根目录,.当前目录,..父目录,用/表示层级等

 

posted @ 2015-08-26 16:02  daisy811  阅读(163)  评论(0编辑  收藏  举报