NSFileHandle文件操作的总结与整理

原文地址 http://blog.csdn.net/swingpyzf/article/details/16325923

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、实例程序,通过程序对文件进行一些基本操作:

#import <Foundation/Foundation.h> 


int main(int argc, const charchar * argv[])  
{  


    @autoreleasepool {  
        NSFileHandle *inFile,*outFile;  
        NSData *buffer;  
        NSString *fileContent = @"这些是文件内容,这些是文件内容,这些是文件内容,这些是文件内容,这些是文件内容";  
        NSFileManager *fm = [NSFileManager defaultManager];  

        //创建一个文件 
        [fm createFileAtPath:@"testFile.txt" contents:[fileContent dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  
        //创建一个需要写入的文件 
        [fm createFileAtPath:@"outFile.txt" contents:nil attributes:nil];  

        //读取文件 
        inFile = [NSFileHandle fileHandleForReadingAtPath:@"testFile.txt"];  
        //写入文件 
        outFile = [NSFileHandle fileHandleForWritingAtPath:@"outFile.txt"];  

        if(inFile!=nil){  
            //读取文件内容 
            buffer = [inFile readDataToEndOfFile];  

            //将文件的字节设置为0,因为他可能包含数据 
            [outFile truncateFileAtOffset:0];  

            //将读取的内容内容写到outFile.txt中 
            [outFile writeData:buffer];  

            //关闭输出 
            [outFile closeFile];  

            //验证outFile内容 
            NSLog(@"%@",[NSString stringWithContentsOfFile:@"outFile.txt" encoding:NSUTF8StringEncoding error:NULL]);  


            //创建一个新的文件用来循环写入 
            [fm createFileAtPath:@"outFile2.txt" contents:nil attributes:nil];  

            //打开一个新的输出 
            outFile = [NSFileHandle fileHandleForWritingAtPath:@"outFile2.txt"];  

            //设置一个循环写入10条数据,每条数据都再后面添加上而不是覆盖 
            for (int i = 0; i<10; i++) {  
                //将偏移量设置为文件的末尾 
                [outFile seekToEndOfFile];  
                //写入数据 
                [outFile writeData:buffer];  
            }  

            //验证内容 
            NSLog(@"outFile2:%@",[NSString stringWithContentsOfFile:@"outFile2.txt" encoding:NSUTF8StringEncoding error:NULL]);  

            //关闭所有 
            [outFile closeFile];  
            [inFile closeFile];  


        }  


    }  
    return 0;  
}  

你可能感兴趣的:(ios)