Foundation框架中的NSFileHandle一

看官们,我们在前面章回中介绍了Foundation框架中的NSFileManager,本章回中将介绍Foundation框架中的NSFileHandle


NSFileHandle可以看作是文件指针的封装,更准确的说是文件描述符的封装,这点在官方文档中也提到了:An object-oriented wrapper for a file descriptor.如果看官们有C语言文件操作的基础或者Linux文件操作的基础,那么理解NSFileHandle会容易一些。如果看官们没有这些基础知识也不要担心,我们在本章回中会详细介绍NSFileHandle的使用方法.


工作中对文件的操作主要表现为读写文件中的内容。NSFileHandler提供了相关的方法来读写文件,除此之外,它还提供了打开和关闭文件的方法,以及定位(seek)文件的方法,接下来我们依次介绍这些方法。


打开文件

+ (instancetype)fileHandleForReadingAtPath:(NSString *)path;


该方法可以打开参数path指定的文件,并且返回一个NSFileHandle,通过它从文件中读取内容。

+ (instancetype)fileHandleForWritingAtPath:(NSString *)path;


该方法可以打开参数path指定的文件,并且返回一个NSFileHandle,通过它向文件中写入内容。

关闭文件

- (void)closeFile;


该方法可以关闭已经打开的文件,不过该方法在IOS13.0以后已经被弃用了,建议使用下面的方法关闭文件。


 

- (BOOL)closeAndReturnError:(out NSError * _Nullable *)error;

定位文件


有些看官对于定位文件理解起来有困难,其实NSFileHandl通过封装隐藏了文件指针相关的细节,定位就是获取文件指针在文件中的位置,我们在读写文件时不是一次性完成的,文件指针会指向每次完成的进度,也就是文件指针在文件中的位置,我们获取该进度后就可以对该文件中尚未完成的内容进行读写操作。举个日常生活中的例子:读书时不可能一下子读完整本书,中间休息的时候会在当前阅读的页中放一个书签,下次再阅读本书时可以直接从书签处阅读。阅读整本书的过程就可以当作是读写文件的过程,书签在整个阅读过程中起到了定位的作用,文件定位就类似于书签。

@property(readonly) unsigned long long offsetInFile;


该方可以返回文件指针在文件中的位置,注意返回值的类型,不过该方法在IOS13.0以后已经被弃用了,建议使用下面的方法。
 

- (BOOL)getOffset:(out unsigned long long *)offsetInFile
            error:(out NSError * _Nullable *)error;

- (void)seekToFileOffset:(unsigned long long)offset;


该方法可以把文件指针移动到指定位置,不过该方法在IOS13.0以后已经被弃用了,建议使用下面的方法。
 

- (BOOL)seekToOffset:(unsigned long long)offset
               error:(out NSError * _Nullable *)error;

读写文件内容

- (NSData *)readDataOfLength:(NSUInteger)length;


该方法可以从文件中读取长度(单位为bytes)为length的内容,读取的内容存放在返回的NSData中,不过该方法在IOS13.0以后已经被弃用了,建议使用下面的方法。

- (NSData *)readDataUpToLength:(NSUInteger)length
                         error:(out NSError * _Nullable *)error;

- (void)writeData:(NSData *)data;


该方法可以把data中的内容写入到文件中,不过该方法在IOS13.0以后已经被弃用了,建议使用下面的方法。

- (BOOL)writeData:(NSData *)data
            error:(out NSError * _Nullable *)error;


注意读写文件中的内容都使用NSData作为数据缓冲区,这也是我们在前面章回中介绍NSData的原因。 此外,我统一说下替换弃用方法的新方法,这些方法大部分都返回BOOL类型的值,表示方法执行是否成功,同时还带有NSError类型的参数,该参数中保存了方法运行错误时产生的错误信息。


最后我们对本章回的内容做一个总结:

  • 1.NSFileHandle是对文件描述符的封装,通过封装隐藏了其中的细节,它让我们重点关注文件操作,而不是操作的细节;
  • 2.掌握打开、关闭、读写、定位文件的方法,注意被弃用的方法和它们的替代方法;
  • 3.对于相同的操作NSFileHandle类还提供了其它的方法,大家可以参考官方文档;

看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

猜你喜欢

转载自blog.csdn.net/talk_8/article/details/121187594