利用NSFilehandle類提供的方法刨裆,允許更有效地使用文件澈圈。
一般而言,處理文件時都要經(jīng)歷以下三個步驟:
1.打開文件帆啃,并獲取一個NSFileHandle對象瞬女,以便在后面的I/O操作中引用該文件
2.對打開的文件執(zhí)行I/O操作(讀取、寫入努潘、更新)
3.關閉文件
注意:NSFileHandle
類主要對文件內(nèi)容進行讀取和寫入操作诽偷,可以使用NSFileHandle
做文件的斷點續(xù)傳。
NSFileHandle 此類主要是對文件內(nèi)容進行讀取和寫入操作
NSFileMange 此類主要是對文件進行的操作以及文件信息的獲取
常用處理方法
+ (id)fileHandleForReadingAtPath:(NSString *)path //打開一個文件準備讀取
+ (id)fileHandleForWritingAtPath:(NSString *)path //打開一個文件準備寫入
+ (id)fileHandleForUpdatingAtPath:(NSString *)path //打開一個文件準備更新
- (NSData *)availableData; //從設備或通道返回可用的數(shù)據(jù)
- (NSData *)readDataToEndOfFile; //從當前的節(jié)點讀取到文件的末尾
- (NSData *)readDataOfLength:(NSUInteger)length; // 從當前節(jié)點開始讀取指定的長度數(shù)據(jù)
- (void)writeData:(NSData *)data; //寫入數(shù)據(jù)
- (unsigned long long)offsetInFile; //獲取當前文件的偏移量
- (void)seekToFileOffset:(unsigned long long)offset; //跳到指定文件的偏移量
- (unsigned long long)seekToEndOfFile; //跳到文件末尾
- (void)truncateFileAtOffset:(unsigned long long)offset; //將文件的長度設為offset字節(jié)
- (void)closeFile; 關閉文件
基本用法一 追加數(shù)據(jù)
NSString *homePath = NSHomeDirectory( );
NSString *sourcePath = [homePath stringByAppendingPathConmpone:@"testfile.text"];
NSFileHandle *fielHandle = [NSFileHandle fileHandleForUpdatingAtPath:sourcePath];
[fileHandle seekToEndOfFile]; 將節(jié)點跳到文件的末尾
NSString *str = @"追加的數(shù)據(jù)"
NSData* stringData = [str dataUsingEncoding:NSUTF8StringEncoding];
[fileHandle writeData:stringData]; 追加寫入數(shù)據(jù)
[fileHandle closeFile];
基本用法一 定位數(shù)據(jù)
NSFileManager *fm = [NSFileManager defaultManager];
NSString *content = @"abcdef";
[fm createFileAtPath:path contents:[content dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
NSUInteger length = [fileHandle availabelData] length]; 獲取數(shù)據(jù)長度
[fileHandle seekToFileOffset;length/2]; 偏移量文件的一半
NSData *data = [fileHandle readDataToEndOfFile];
[fileHandle closeFile];
基本用法一 復制文件
NSFileHandle *infile, *outfile; //輸入文件、輸出文件
NSData *buffer; //讀取的緩沖數(shù)據(jù)
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *homePath = NSHomeDirectory( );
NSString *sourcePath = [homePath stringByAppendingPathComponent:@"testfile.txt"]; // 源文件路徑
NSString *outPath = [homePath stringByAppendingPathComponent:@"outfile.txt"]; //輸出文件路徑
BOOL sucess = [fileManager createFileAtPath:outPath contents:nil attributes:nil];
if (!success)
{
return N0;
}
infile = [NSFileHandle fileHandleForReadingAtPath:sourcePath]; //創(chuàng)建讀取源路徑文件
if (infile == nil)
{
return NO;
}
outfile = [NSFileHandle fileHandleForReadingAtPath:outPath]; //創(chuàng)建并打開要輸出的文件
if (outfile == nil)
{
return NO;
}
[outfile truncateFileAtOffset:0]; //將輸出文件的長度設為0
buffer = [infile readDataToEndOfFile]; //讀取數(shù)據(jù)
[outfile writeData:buffer]; //寫入輸入
[infile closeFile]; //關閉寫入、輸入文件
[outfile closeFile]畜侦;