iOS - NSFileHandle

428 阅读2分钟
  • 读取文件类:

    • NSFileManager:对文件删除、修改、移动、复制操作等。

    • NSFileHandle:对文件内容进行读取和写入操作。

      • 处理文件步骤:
        1.创建一个NSFileHandle对象;
        2.对打开的文件进行I/O操作(读取、写入、更新);
        3.关闭文件。

      • 可以使用NSFileHandle做文件的断点续传。

  • 常用方法:

//读、写、可读写
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:@"path"];
NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:@"path"];
NSFileHandle *fh = [NSFileHandle fileHandleForUpdatingAtPath:@"path"];
//从设备或通道返回可用的数据
NSData *data = [fielHandle availableData];
//从当前的节点读取到文件的末尾
NSData *data = [fielHandle readDataToEndOfFile];
//从当前节点开始读取指定的长度数据
NSData *data = [fielHandle readDataOfLength:10];
//写入数据
- (void)writeData:(NSData *)data;
//从当前的节点读取到文件的末尾
- (NSData *)readDataToEndOfFile;
//从当前节点开始读取指定的长度数据
- (NSData *)readDataOfLength:(NSUInteger)length;
//获取当前文件的偏移量
long long offsetInFile = [fielHandle offsetInFile];
//跳到指定文件的偏移量
[fielHandle seekToFileOffset:10];
//跳到文件末尾
long long endFile = [fielHandle seekToEndOfFile];
//将文件的长度设为offset字节
[fielHandle truncateFileAtOffset:500];
//关闭文件
[fielHandle closeFile];
  • 追加数据
NSString *homePath = NSHomeDirectory();
NSString *sourcePath = [homePath stringByAppendingPathComponent:@"TestFile.text"];
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:sourcePath];
[fileHandle seekToEndOfFile];//将节点跳到文件的末尾
        
NSString *str = @"追加的数据";
NSData *stringData = [str dataUsingEncoding:NSUTF8StringEncoding];
[fileHandle writeData:stringData];//追加写入数据
[fileHandle closeFile];
  • 定位数据
NSString *homePath  = NSHomeDirectory();
NSString *path = [homePath stringByAppendingPathComponent:@"TestFile.text"];
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
//获取数据长度
NSUInteger length = [[fileHandle availableData] length];
//偏移量文件的一半
[fileHandle seekToFileOffset:length/2];
NSData *data = [fileHandle readDataToEndOfFile];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
[fileHandle closeFile];
  • 复制文件
//源文件路径
NSString *sourcePath = [NSHomeDirectory()  stringByAppendingPathComponent:@"TestFile.txt"];
//输出文件路径
NSString *outPath = [NSHomeDirectory() stringByAppendingPathComponent:@"OutFile.txt"];

//文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success  = [fileManager createFileAtPath:outPath contents:nil attributes:nil];
if (success) {
    NSLog(@"~~~输出文件路径创建成功~~~");
}

//读取源路径文件
NSFileHandle *inFileHandle = [NSFileHandle fileHandleForReadingAtPath:sourcePath];
if (inFileHandle == nil){
    NSLog(@"读取源路径文件不存在~");
    return NO;
}

//创建并打开要输出的文件
NSFileHandle *outFileHandle = [NSFileHandle fileHandleForWritingAtPath:outPath];
if (outFileHandle == nil){
    NSLog(@"要输出的文件路径不存在~");
    return NO;
}
//将输出文件的长度设为0
[outFileHandle truncateFileAtOffset:0];

//读取的缓冲数据
NSData *data = [inFileHandle readDataToEndOfFile];
//写入输入
[outFileHandle writeData:data];

//关闭写入、输入文件
[inFileHandle closeFile];
[outFileHandle closeFile];