iOS6.1 & iOS 7 & iOS8 判断沙盒文件或者目录是否存在,以及判断是文件还是目录的一个隐藏问题

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory

通常,iOS系统中判断文件或者目录是否存在,可以用上面这个API。

第二个参数 isDirectory是个传出参数, 用于返回,是文件还是目录。

一般两种情况会使用这个API

需求一、 判断文件或者目录是否存在

需求二. 判断path是文件还是目录

需求一、只要判断这个API的返回值,YES为存在,NO为不存在即可,isDirectory不需要判断

因为当传入参数 path不存在时, isDirectory返回的是 undefined, 如果不想要判断是否目录, 这个参数可传NULL。纵观网上的例子,判断文件或者目录是否存在时,同时也会判断这个参数的BOOL值。其实是错误的,因为还有第三个值undefined。

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 contains NO. If path doesn’t exist, this value is undefined upon return. Pass
NULL if you do not need this information.

尤其有意思的是,

当path看起来像是一个目录字符串时, iOS6和7和8,isDirectory返回的值不同。

iOS 6.1对这个的undefined,判断为NO,

而iOS7和8,返回YES

这个问题导致,如果使用isDirectory,在iOS6.1的系统中,是无法判断一个不存在 path, 它是一个文件或者文件夹。仅仅需要根据这个API的返回值判断即可

本文的分析,主要是解决iOS6与后续系统,对同一个API调用的细节处理。仅供参考。

需求二, 判断path是文件还是目录

根据需求一的分析

如果要判断path是文件还是目录,在iOS6.1中,需要确保path是存在的。那么实际应该是两步操作

第一次调用- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory,根据返回值,判断是否存在

如果存在,进行第二次调用。

第二次调用- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory,根据 isDirectory,判断是否是目录

以上分析仅供参考

时间: 2024-08-04 18:25:53

iOS6.1 & iOS 7 & iOS8 判断沙盒文件或者目录是否存在,以及判断是文件还是目录的一个隐藏问题的相关文章

iOS开发之获取沙盒路径

iOS开发之沙盒机制(SandBox)具体解说了沙盒的一些机制.在开发中,我们须要对沙盒进行操作.所以我们须要获取到沙盒路径. 沙盒里的目录包含Documents.Library.tmp.这三个目录的作用请点击这里.接下来我们来解说怎样获取Documents.Library.tmp的路径. 获取沙盒根文件夹 获取沙盒根文件夹.直接调用NSHomeDirectory(): //获取沙盒根文件夹 NSString *directory = NSHomeDirectory(); NSLog(@"dir

再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸

作者:蒸米 ----------------- 0x00 序 Ian [email protected]发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],[email protected]也发表了关于Triple_Fetch的分析[2],但由于这个漏洞和exp有非常多的亮点,所以还剩很多可以深入挖掘的细节.因此,我们简单分析一下漏洞形成的原因,并具体介绍一下漏洞利用的细节,以及如何利用这个漏洞做到iOS 10.3.2上的沙盒逃逸. 0x01 CVE-2017

iOS开发日记14-NSFileManager(沙盒和清除缓存)

今天博主有一个文件管理的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像Android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录. Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数

iOS模拟器的应用沙盒在MAC中的位置

每个iOS应用都有自己专属的应用沙盒.分别为 应用程序包 Documents/ Library/Caches/ Library/Preferences/ tmp/ 当运行模拟时,在MAC下找到对应路径的规则随XCode的版本会有不同,在XCode6下的路径为 应用程序包 ~Library/Developer/CoreSimulator/Devices/<模拟器设备id>/data/Containers/Bundle/Application/<应用id> 其中模拟器设备id可以在XC

iOS开发之应用沙盒

1.应用沙盒概述 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒. 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer). 模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Application Support/iPhone Simulator/6.0/ Applications [备注]默认情况下,模拟器的目录是隐藏的,要想显示出来

判断沙盒文件或者目录是否存在,以及判断是文件还是目录的一个隐藏问题

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory 通常,iOS系统中判断文件或者目录是否存在,可以用上面这个API. 第二个参数 isDirectory是个传出参数, 用于返回,是文件还是目录. 一般两种情况会使用这个API 需求一. 判断文件或者目录是否存在 需求二. 判断path是文件还是目录 需求一.只要判断这个API的返回值,YES为存在,NO为不存在即可,isDirectory不需要判断

iOS开发总结之沙盒存储

1.属性列表plist存储 /* plist只能存储是写入到Documents目录下且只能是系统自带的一些常规的类,也就是有writeToFile方法的对象才可以使用plist保存数据 字符串/字典/数据/NSNumber/NSData ... 自定义的对象不能保存到plist中 */ /** * 点击保存按钮 */ - (IBAction)saveDataBtnClick:(id)sender { // NSUserDomainMask 在用户目录下查找 // YES 代表展开用户目录的~ /

iOS Xcode6.0的沙盒路径

当我们把Xcode升级到6.0之后我们会发现我们在以前的沙河路径下找不到我们的项目文件了.那么这些文件现在放在哪里了呢, 路径: Library/Developer/CoreSimulator/Devices 当然最简单实际的办法就是我们在项目中输出一下路径,那样就会一目了然的看到路径了 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NS

iOS沙盒中,如何判断存在文件、目录

在iOS开发中,在沙盒中创建沙盒一些存储各个功能的文件目录或者文件. 使用: [NSFileManager defaultManager] 1.判断目录,用她可以. 2.判断文件,用她可以. 3.创建目录,用她可以. 4.创建文件,用她可以. 基本实现都差不多,就是得到目录.文件在沙盒的路径之后. 1.首先判断是否存在: [[NSFileManager defaultManager] fileExistsAtPath:目录(文件)路径] 2.不存在就创建她: [[NSFileManager de