NSFileHandle处理文件 IO
使用NSFileHandle的基本步骤如下:
- 创建一个NSFileHandle,该NSFileHandle将会打开指定的文件;
- 对打开的文件执行IO操作;
- 关闭文件。
NSFileHandle提供的常用方法如下:
1. + (nullable instancetype)fileHandleForReadingAtPath:(NSString *)path;
根据指定路径打开一份准备读取文件内容的文件,并返回该文件对应的NSFileHandle;
2. + (nullable instancetype)fileHandleForWritingAtPath:(NSString *)path;
:根据指定路径打开一份准备写入内容的文件,并返回该文件对应的NSFileHandle;
3. + (nullable instancetype)fileHandleForUpdatingAtPath:(NSString *)path;
根据指定路径打开一份即可读取,又可写入文件内容的文件,并返回该文件对应的NSFileHandle;
4. + (nullable instancetype)fileHandleForReadingFromURL:(NSURL *)url error:(NSError **)error :;
根据指定URL打开一份准备读取文件内容的文件,并返回该文件对应的NSFileHandle;
5. + (nullable instancetype)fileHandleForWritingToURL:(NSURL *)url error:(NSError **)error NS_AVAILABLE(10_6, 4_0);
根据指定URL打开一份准备写入内容的文件,并返回该文件对应的NSFileHandle;
6. + (nullable instancetype)fileHandleForUpdatingURL:(NSURL *)url error:(NSError **)error NS_AVAILABLE(10_6, 4_0);
根据指定URL打开一份即可读取,又可写入文件内容的文件,并返回该文件对应的NSFileHandle;
7. + (NSFileHandle *)fileHandleWithStandardError;
打开标准错误输出设备对应的NSFileHandle;
8. + (NSFileHandle *)fileHandleWithStandardInput;
打开标准输入设备(通常是键盘 )对应的NSFileHandle;
9. + (NSFileHandle *)fileHandleWithStandardOutput;
:打开标准输出设备(通常是屏幕 )对应的NSFileHandle;打开标准输入设备(通常是键盘 )对应的NSFileHandle;
10. + (NSFileHandle *)fileHandleWithNullDevice;
打开空设备对应的NSFileHandle;
11. availableData
返回该文件中包含的所有数据;
12. fileDescriptor
获取对应的文件描述器
13. - (NSData *)readDataToEndOfFile;
读取文件中包含的所有数据;
14. - (NSData *)readDataOfLength:(NSUInteger)length;
读取该文件中 length 字节的数据。
- (NSData *)readDataOfLength:(NSUInteger)length;
返回的length 字节的数据包装成 NSData 对象,如果已经超了文件末尾处,程序返回一个不含任何数据的 NSData 对象,SO——程序 可以通过该方法返回的 NSData的length方法是否返回0来判断是否已经读到了文件结尾处。
-
15. - (void)writeData:(NSData *)data;
将指定的 data 数据输入到该文件中;
16. offsetInFile
获取该NSFileHandle中文件指针的位置;
提示:
文件指针记录了当前读,写文件的位置——文件指针所在的位置,也就是接下来 NSFileHandle要读/写的位置。
-
17. - (unsigned long long)seekToEndOfFile;
将该NSFileHandle中文件指针移动到文件的结尾处;
18. - (void)seekToFileOffset:(unsigned long long)offset;
将该NSFileHandle中文件指针移动到指定位置处;
19. - (void)closeFile
关闭底层文件;
20. - (void)truncateFileAtOffset:(unsigned long long)offset
将文件长度截断为 offset 字节——若该offset参数小于文件本身大小,多余的部分被截断;若大于文件本身大小,文件末尾将会被填充空数据;
除此之外,NSFileHandle还提供了用于后台(即异步)读写文件的方法,这些方法大多以InBackgroundAndNotify结尾,这些方法,读,写文件内容时不会阻塞前台线程,会在后台完成对文件的读,写。读,写完成后,这些方法会向前台发一个通知。
特别说明:
NSFileHandle没有创建文件的功能,必须使用 fileManager来 创建对象。
- 当文件不存在时,如果使用fileHandleForWritingAtPath
或fileHandleForUpdatingAtPath
方法来打开文件,这2个方法都会返回 nil;
- 如果文件存在,上面的2个方法打开文件后,文件记录指针都