首页 > 代码库 > NSFileHandle类

NSFileHandle类

Objective-C使用NSFileHandle类对文件进行基本操作,IOS文件操作


NSFileHandle类中得方法可以对文件进行基本的读写,偏移量的操作。
NSFileHandle基本步骤:
1、打开文件,获取一个NSFileHandle对象。
2、对打开NSFileHandle的文件对象行I/O操作
3、关闭文件对象


NSFileHandle常用方法:

+(NSFileHandle*)fileHandleForReadingAtPath:path 打开一个文件用于读入

+(NSFileHandle*)fileHandleForWritingAtPath:path 打开一个文件用于写入

+(NSFileHandle*)fileHandleForUpdatingAtPath:path 打开一个文件用于读写

-(NSData*)availableData 从设备或者通道返回可用数据

-(NSData*)readDataToEndOfFile 读取其余的数据知道文件的末尾(最多UINT_MAX字节)

-(NSData*)readDataOfLength:(NSUInteger)bytes 从文件中读取指定字节的内容

-(void)writeData:data  将data写入文件

-(unsigned long long)offsetInFile 获取当前偏移量

-(void)seekToFileOffset:offset  设置偏移量

-(unsigned long long)seekToEndOfFile 将偏移量定位到文件的末尾

-(void)truncateFileAtOffset:offset 讲文件的长度设置为offset字节

-(void)closeFile 关闭文件


方法fileHandleForWritingAtPath和fileHandleForUpdatingAtPath所指定的文件必须是已经存在的,否则返回nil,另外对于这两个方法中文件的偏移量都是为文件的开始。


方法readDataToEndOfFile每次从文件中读取最多UNIT_MAX字节的数据,这个量定义在
<limits.h>中。


在UNIX系统下编程打开文件进行写入并不会截断文件,需要自己完成截断


1、实例程序,通过程序对文件进行一些基本操作:

[objc] view plaincopyprint?
 
    1. //  
    2. //  main.m  
    3. //  NSFileHandle  
    4. //  
    5. //  Created by swinglife on 13-11-14.  
    6. //  Copyright (c) 2013年 swinglife. All rights reserved.  
    7. //  
    8.   
    9.   
    10. #import <Foundation/Foundation.h>  
    11.   
    12.   
    13. int main(int argc, const charchar * argv[])  
    14. {  
    15.   
    16.   
    17.     @autoreleasepool {  
    18.         NSFileHandle *inFile,*outFile;  
    19.         NSData *buffer;  
    20.         NSString *fileContent = @"这些是文件内容,这些是文件内容,这些是文件内容,这些是文件内容,这些是文件内容";  
    21.         NSFileManager *fm = [NSFileManager defaultManager];  
    22.           
    23.         //创建一个文件  
    24.         [fm createFileAtPath:@"testFile.txt" contents:[fileContent dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  
    25.         //创建一个需要写入的文件  
    26.         [fm createFileAtPath:@"outFile.txt" contents:nil attributes:nil];  
    27.           
    28.         //读取文件  
    29.         inFile = [NSFileHandle fileHandleForReadingAtPath:@"testFile.txt"];  
    30.         //写入文件  
    31.         outFile = [NSFileHandle fileHandleForWritingAtPath:@"outFile.txt"];  
    32.           
    33.         if(inFile!=nil){  
    34.             //读取文件内容  
    35.             buffer = [inFile readDataToEndOfFile];  
    36.               
    37.             //将文件的字节设置为0,因为他可能包含数据  
    38.             [outFile truncateFileAtOffset:0];  
    39.               
    40.             //将读取的内容内容写到outFile.txt中  
    41.             [outFile writeData:buffer];  
    42.               
    43.             //关闭输出  
    44.             [outFile closeFile];  
    45.               
    46.             //验证outFile内容  
    47.             NSLog(@"%@",[NSString stringWithContentsOfFile:@"outFile.txt" encoding:NSUTF8StringEncoding error:NULL]);  
    48.               
    49.               
    50.             //创建一个新的文件用来循环写入  
    51.             [fm createFileAtPath:@"outFile2.txt" contents:nil attributes:nil];  
    52.               
    53.             //打开一个新的输出  
    54.             outFile = [NSFileHandle fileHandleForWritingAtPath:@"outFile2.txt"];  
    55.               
    56.             //设置一个循环写入10条数据,每条数据都再后面添加上而不是覆盖  
    57.             for (int i = 0; i<10; i++) {  
    58.                 //将偏移量设置为文件的末尾  
    59.                 [outFile seekToEndOfFile];  
    60.                 //写入数据  
    61.                 [outFile writeData:buffer];  
    62.             }  
    63.               
    64.             //验证内容  
    65.             NSLog(@"outFile2:%@",[NSString stringWithContentsOfFile:@"outFile2.txt" encoding:NSUTF8StringEncoding error:NULL]);  
    66.               
    67.             //关闭所有  
    68.             [outFile closeFile];  
    69.             [inFile closeFile];  
    70.               
    71.               
    72.         }  
    73.          
    74.           
    75.     }  
    76.     return 0;  
    77. }