前言
众所周知,断点续传可以通过句柄 NSFileHandle
实现,那 NSFileHandle
类的主要作用是什么呢?NSFileHandle
类作用主要是对文件内容进行读取和写入操作。NSFileHandle
经常会跟 NSFileManger
搭配使用。NSFileManger
类主要是对文件进行的操作以及文件信息的获取。
常用方法
// 打开一个文件准备读取
+ (id)fileHandleForReadingAtPath:(NSString *)path;
// 打开一个文件准备写入
+ (id)fileHandleForWritingAtPath:(NSString *)path;
// 打开一个文件准备更新
+ (id)fileHandleForUpdatingAtPath:(NSString *)path;
// 从设备或通道返回可用的数据
- (NSData *)availableData;
// 从当前的节点读取到文件的末尾
- (NSData *)readDataToEndOfFile;
// 从当前节点开始读取指定的长度数据
- (NSData *)readDataOfLength:(NSUInteger)length;
// 写入数据
- (void)writeData:(NSData *)data;
// 获取当前文件的偏移量
- (unsigned long long)offsetInFile;
// 跳到指定文件的偏移量
- (void)seekToFileOffset:(unsigned long long)offset;
// 跳到文件末尾
- (unsigned long long)seekToEndOfFile;
// 将文件的长度设为offset字节
- (void)truncateFileAtOffset:(unsigned long long)offset;
// 关闭文件
- (void)closeFile;
示例代码
- 追加数据,以下是核心代码:
/**
追加数据
*/
- (void)test1 {
// 打开文件准备更新
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:self.fullPath];
// 移动文件句柄到文件末尾
[fileHandle seekToEndOfFile];
NSString *addString = @"追加的数据";
NSData *addData = [addString dataUsingEncoding:NSUTF8StringEncoding];
// 写数据到文件
[fileHandle writeData:addData];
// 释放文件句柄
[fileHandle closeFile];
}
- 定位数据,以下是核心代码:
/**
定位数据
*/
- (void)test2 {
// 打开一个文件准备读取
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:self.fullPath];
// 从设备或通道返回可用的数据
NSData *fileData = [fileHandle availableData];
// 获取数据长度
NSInteger dataLength = fileData.length;
// 跳到指定文件的偏移量
[fileHandle seekToFileOffset:dataLength * 0.5];
// 从当前的节点读取到文件的末尾
NSData *data = [fileHandle readDataToEndOfFile];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);
// 释放文件句柄
[fileHandle closeFile];
}
- 复制数据,以下是核心代码:
/**
复制文件
*/
- (void)test3 {
// 打开一个文件准备读取
NSFileHandle *outHandle = [NSFileHandle fileHandleForWritingAtPath:self.outPath]; //创建并打开要输出的文件
// 将输出文件的长度设为0
[outHandle truncateFileAtOffset:0];
// 打开一个文件准备读取
NSFileHandle *inHandle = [NSFileHandle fileHandleForReadingAtPath:self.fullPath];
// 读取的缓冲数据
NSData *buffer = [inHandle readDataToEndOfFile];
// 写数据到文件
[outHandle writeData:buffer];
// 释放文件句柄
[inHandle closeFile];
[outHandle closeFile];
}
Author
如果你有什么建议,可以关注我,直接留言,留言必回。