- 20
- 0
- 约1.28千字
- 约 2页
- 2021-11-14 发布于江苏
- 举报
iOS6.1 iOS 7 iOS8
判断沙盒文件或者目录是否存在,以及判断是文件还是目 录的一个隐藏问题
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory 通常,iOS 系统中判断文件或者目录是否存在,可以用上面这个 API。
第二个参数 isDirecto是ry个传出参数, 用于返回,是文件还是目录。
一般两种情况会使用这个 API
需求一、 判断文件或者目录是否存在需求二.判断 path是文件还是目录
需求一、只要判断这个 API 的返回值,YES 为存在,NO 为不存在即可,isDirector不y 需要判断
因为当传入参数 path不存在时, isDirecto返ry回的是 undefine,d 如果不想要判断是否目录,
这个参数可传 NULL 。纵观网上的例子,判断文件或者目录是否存在时,同时也会判断这个参数的 BOOL 值。其实是错误的,因为还有第三个值 undefine。d
isDirectory
Upon return, contains YES if path is a directory or if the final path element is a symbolic link that points to a directory, otherwise contIafinpsatNhO.doesn’t exist, this value is undefined upon return.
Pass NULL if you do not need this information.
尤其有意思的是,
当 path看起来像是一个目录字符串时,
当 path看起来像是一个目录字符串时, iOS6和 7 和 8,isDirector返y 回的值不同。
iOS 6.1对这个的 undefined,判断为 NO ,
而 iOS7 和 8,返回 YES
这个问题导致,如果使用 isDirector,y在 iOS6.1的系统中,是无法判断一个不存在 pat,h 它是一个文件或者文件夹。仅仅需要根据这个 API 的返回值判断即可
本文的分析,主要是解决 iOS6 与后续系统,对同一个 API 调用的细节处理。仅供参考。
需求二, 判断 path是文件还是目录
根据需求一的分析
如果要判断 path是文件还是目录,在 iOS6.1中,需要确保 path是存在的。那么实际应该是两步操作
第一次调用- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)i,sD根ir据ec返to回ry值,判断是否存在
如果存在,进行第二次调用。
第二次调用- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)i,sD根ir据ectory isDirector,y判断是否是目录
以上分析仅供参考
原创力文档

文档评论(0)