iOS获取沙盒文件

1、沙河盒根目录的结构
  • Documents:此目录用来保存应用程序在运行时生成的一些需要长久保存的重要数据放在此文件中。通过iTunes,iCloud备份时,会备份此目录下的数据。iTunes共享文件时,可以共享此文件目录。
  • Library
    • Caches :此目录用来保存应用程序运行时生成的需要持久化的数据,这些数据一般存储体积比较大,又不是十分重要,比如网络请求数据等。这些数据需要用户负责删除。iTunes同步设备时不会备份该目录。
    • Preferences :此目录保存应用程序的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。在Preferences/下不能直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好。iTunes同步设备时会备份该目录。
  • tmp:此目录保存应用程序运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。


    image
2、获取各种文件目录的路径
  • 获取目录路径的方法:
// 获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
// 获取Documents目录路径
// NSString *docDir = [homeDir stringByAppendingPathComponent:@"Documents"];
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
// 获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
// 获取Caches目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// 获取tmp目录路径
NSString *tmpDir =  NSTemporaryDirectory();
  • 获取应用程序程序包中资源文件路径的方法:
NSLog(@"%@", [[NSBundle mainBundle] bundlePath]);
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
3、获取模拟器沙盒文件

使用断点,在控制台选中输入:po NSHomeDirectory()

4、获取真机沙盒文件
  • 连接设备,在Xcode下点击Window->Device and Simulators(cmd + shift + 2) 弹出窗口,左边选择你的设备,右边找到你已安装的APP,选中你想要查看沙盒文件的APP。
  • 点击底部有个类似设置的按钮,出现几个选项,选择Download Container ,下载文件到本地,将会看到一个后缀为xcappdata的文件,选择这个文件并显示包内容查看沙盒文件。
5:macOS文件(目录)名不区分大小写,但是iOS有区分,创建目录在真机和模拟器下会有不同结果
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *testPath = [docPath stringByAppendingPathComponent:@"test"];
NSString *TestPath = [docPath stringByAppendingPathComponent:@"Test"];
BOOL isDir;
NSError *error = nil;
if ([fileManager fileExistsAtPath:testPath isDirectory:&isDir] && isDir) {
    NSLog(@"test目录已存在");
} else {
    [fileManager createDirectoryAtPath:testPath withIntermediateDirectories:YES attributes:nil error:&error];
    if (error) {
        NSLog(@"创建test目录失败:%@", error);
    } else {
        NSLog(@"创建test目录成功");
    }
}
if ([fileManager fileExistsAtPath:TestPath isDirectory:&isDir] && isDir) {
    NSLog(@"Test目录已存在");
} else {
    [fileManager createDirectoryAtPath:TestPath withIntermediateDirectories:YES attributes:nil error:&error];
    if (error) {
        NSLog(@"创建Test目录失败:%@", error);
    } else {
        NSLog(@"创建Test目录成功");
    }
}

//macOS文件名不区分大小写,但iOS区分大小写
/*模拟器下输出:
 test目录已存在
 创建Test目录失败:Error Domain=NSCocoaErrorDomain Code=4 "The file “Test” doesn’t exist." UserInfo={NSFilePath=/Users/admin/Library/Developer/CoreSimulator/Devices/10DFAD8C-74DB-4129-8C90-2991A89C5574/data/Containers/Data/Application/513F18A5-C444-4824-AC4A-046230ED1498/Documents/Test, NSUnderlyingError=0x6000000836f0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
 */
/*真机下输出:
 创建test目录成功
 创建Test目录成功
 */
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容