Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基础篇- 沙盒以及文件的操作和存取

基础篇- 沙盒以及文件的操作和存取

作者头像
進无尽
发布于 2018-09-12 10:12:37
发布于 2018-09-12 10:12:37
1.5K00
代码可运行
举报
文章被收录于专栏:進无尽的文章進无尽的文章
运行总次数:0
代码可运行

来感受下iOS app的沙盒

官方文档图片,自行感受下

沙盒机制(sandBox)

iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒,所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

  • 每个应用程序都有自己的存储空间。
  • 应用程序不能翻过自己的围墙去访问别的存储空间的内容。
  • 应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。

如果要访问到其他 App 的范围,必须要获取管理员许可才行,比如地理位置,相册,通讯录,话筒等。这是苹果系统的哲学,苹果认为只有把各个 App 孤立起来才能营造良好的用户体验和安全性。

通过下面的图来看一下苹果的沙盒机制吧.

通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。

沙盒目录结构

默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 Tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件

Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。

Library:苹果建议用来存放默认设置或其它状态信息。会被iTunes同步但是要除了Caches子目录外。

  • Library/Caches:主要是缓存文件,用户使用过程中缓存都可以保存在这 个目录中。这个目录就用于保存那些可再生的文件,可以重新下载或者重新生成的数据应该保存在目录下面。(比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹)。磁盘空间不够时 系统会删除 不会被iTunes同步。
  • Library/Preferences:应用程序的偏好设置文件。我们使用NSUserDefaults写的设置数据都会保存到该目录下的一个plist文件中,这就是所谓的写道plist中! 会被iTunes同步。

tmp:各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,也可能随着项目退出删掉。不会被iTunes同步。

iPhone在重启时,会丢弃所有的tmp文件。

沙盒文件的操作

获取程序的home目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSString *homeDirectory = NSHomeDirectory();
  NSLog(@"path:%@", homeDirectory);

获取document目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *path = [paths objectAtIndex:0];
  NSLog(@"path:%@", path);

获取Cache目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  NSString *path = [paths objectAtIndex:0];
  NSLog(@"%@", path);

获取Library目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
   NSString *path = [paths objectAtIndex:0];
  NSLog(@"%@", path);

获取Tmp目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSString *tmpDir = NSTemporaryDirectory();
  NSLog(@"%@", tmpDir);

存数据到沙盒plist文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  +(void)writeDataToPlist :(NSMutableArray *)dataArray
  {
        NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
        NSString *path=[paths    objectAtIndex:0];
        NSLog(@"path:%@",path);
        NSString *filename=[path stringByAppendingPathComponent:@"searchHistory.plist"];
        //写入
        NSFileManager* fm = [NSFileManager defaultManager];
        [fm createFileAtPath:filename contents:nil attributes:nil];
        [dataArray writeToFile:filename atomically:YES];
      }

沙盒plist文件读取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   +(NSArray *)getDataFormPlist{

        NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
        NSString *path=[paths objectAtIndex:0];
        NSString *filename=[path stringByAppendingPathComponent:@"searchHistory.plist"];
        //读文件
        NSArray* dataArray = [NSArray arrayWithContentsOfFile:filename];
        return dataArray;
  }

可以查看沙盒的应用

查看真机应用沙盒子

查看模拟器应用沙盒

文件常见操作

判断某文件是否存在

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSFileManager* fm=[NSFileManager defaultManager];
   if(![fm fileExistsAtPath:[self dataFilePath]]){
      //下面是对该文件进行制定路径的保存
     [fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];
  }

保存某个文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
可以用 NSFileManager的
  - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;
或 NSData 的
  - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
  - (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;

删除文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 NSFileManager* fm=[NSFileManager defaultManager];
 NSError *myError = nil;
if ([fm removeItemAtPath:@"" error:&myError] == YES){
}

移动文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSFileManager* fm=[NSFileManager defaultManager];
 NSError *myError = nil;
if ([fm moveItemAtPath:@"" toPath:@"" error:&myError] == YES){
}

拷贝文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSFileManager* fm=[NSFileManager defaultManager];
 NSError *myError = nil;
if ([fm copyItemAtPath:@"" toPath:@"" error:&myError] == YES){
    
}

取得一个目录下得所有文件名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 NSArray *files = [fm subpathsAtPath: [self dataFilePath] ];

读取某个文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSData *data = [fm contentsAtPath:[self dataFilePath]];
  //或者
  NSData *data = [NSData dataWithContentOfPath:[self dataFilePath]];

保存汉字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile.txt"];
NSString *content=@"更深夜静人已息";
NSData *contentData=[content dataUsingEncoding:NSUnicodeStringEncoding];
  if ([contentData writeToFile:fileName atomically:YES]) {
    NSLog(@">>write ok.");
  }

使用工程中的文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  NSString *myFilePath = [[NSBundle mainBundle] pathForResource:@"f"   ofType:@"txt"];
  NSString *myFileContent=[NSString stringWithContentsOfFile:myFilePath encoding:NSUTF8StringEncoding error:nil];
 NSLog(@"bundel file path: %@ \nfile content:%@",myFilePath,myFileContent);

小结

后续如果有新的相关知识get,会持续更新。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.12.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenStack运维之安装Neutron服务
OpenStack网络服务提供了一个API接口,允许用户在云上设置和定义网络连接和地址。这个网络服务的项目代码名称是Neutron。OpenStack网络处理虚拟设备的创建和管理网络基础设施,包括网络、交换机、子网以及由计算服务(nova)管理的设备路由器。高级服务,如防火墙或虚拟私人网络(VPN)也可以使用。
王先森sec
2023/04/24
9140
OpenStack运维之安装Neutron服务
OpenStack集群部署—Neutron集群
Neutron概述 ​ Neutron是 OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。
院长技术
2020/06/12
1.1K0
完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务。 以下对openstack的部署过程及其使用做一详细介绍,仅仅依据本人实际经验而述,如有不当,敬请指出~ ******************************************************************************************************************************** 1 OpenSt
洗尽了浮华
2018/01/22
12.8K2
完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
OpenStack云计算之路-Mitaka 版本
1.1 云计算简介 云计算(英语:cloud computing ),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。 云计算是继1980年代
惨绿少年
2018/03/30
6.4K0
openstack安装(27)
[root@controller ~]#yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge python-neutronclient ebtables ipset
陈不成i
2021/05/07
3800
OpenStack集群部署—Neutron计算节点
部署 安装neutron-linuxbridge # 在全部计算节点安装neutro-linuxbridge服务,以compute01节点为例 [root@compute01 ~]# yum install openstack-neutron-linuxbridge ebtables ipset -y 配置neutron.conf # 在全部计算节点操作,以computer01节点为例; # 注意”bind_host”参数,根据节点修改; # 注意neutron.conf文件的权限:root:neutron
院长技术
2020/06/12
8260
(六)OpenStack---M版---双节点搭建---Neutron安装和配置
#systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service #systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
指剑
2022/07/15
6770
(六)OpenStack---M版---双节点搭建---Neutron安装和配置
OpenStack踩坑之路(3)
使用OpenStack Compute来托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。
没有故事的陈师傅
2019/07/28
1.6K0
Ubuntu 20.04 搭建OpenStack Yoga(allinone)
很多文章都是devstack安装的allinone,我这里使用源码组件手动安装。
全栈程序员站长
2022/11/17
3.8K0
openstack常用命令
查看rabbitmq 队列:rabbitmqctl list_queues [root@controller ~]# rabbitmqctl list_queues Listing queues reply_56e60e52bf7145a3b6b5e1d54b633599 0 q-agent-notifier-binding-activate.node2 0 q-agent-notifier-port-update_fanout_1fa7ca53d470470b8c4fe240bf73a567 0 reply_752f5636dc114913b9430c5f76182b9a 0 q-agent-notifier-port-update_fanout_b38b3e13404f4490819bb4ee89141c55 0 q-agent-notifier-network-update.controller 0 q-agent-notifier-binding-activate_fanout_ee07343186f345f1ae54da1ed67c0fd5 0 l3_agent 0 conductor_fanout_a624520fb9584b63b857d02e2af6fbb3 0 scheduler_fanout_7ceb912850054ac4b8ef72456b307244 0 scheduler_fanout_dbf1f1c1af394815b8adb07258a36e82 0 reply_c395cbc019b14012b223cba4a6a1fa3b 0 cinder-volume.node2@ceph_fanout_3604cfb573664ffd8ee7fcbf1ea97f20 0 compute.node1 0 q-agent-notifier-l2population-update.controller 0 q-agent-notifier-binding-deactivate.node1 0 reply_cbefdb394e2e4d54a33ecb6be428edf4 0 reply_9d4ce6a302274e8c9ec32a6054ff8843 0 neutron-vo-QosPolicy-1.7_fanout_4a9fb7ca423f4546a795336440db7a4a 0 q-agent-notifier-security_group-update.node3 0 reply_59c0939282504e43895fb231a6918c7c 0 q-reports-plugin 0 consoleauth_fanout_83a5253d7f174a7fb38f2f23b2d4229d 0 q-agent-notifier-binding-deactivate_fanout_2c436b3fee8d4064a54bcafd054317b3 0 neutron-vo-QosPolicy-1.7 0 q-agent-notifier-port-update 0 cinder-volume.node2@ceph-ssd_fanout_27c556750dcf4613b0ab406924c8118e 0 scheduler 0 neutron-vo-SubPort-1.0 0
院长技术
2020/06/15
9990
Openstack之Newton
一、组网需求: 1、如下图所示,某用户内网被划分为VLAN 10、VLAN 20、VLAN 30,以实现相互间的2 层隔离; 2、3 个VLAN 对应的IP 子网分别为192.168.10.0/24 、192.168.20.0/24 、192.168.30.0/24,3 个VLAN 通过3 层核心交换机的IP 转发能力实现子网互连。 三、配置要点: 本用例以核心交换机和1 台接入交换机为例说明配置过程。要点如下: 1)在核心交换机配置3 个VLAN,配置下连接入交换机的端口为trunk 口 2)在核心交换机配置3 个SVI 口,分别作为3 个VLAN 对应IP 子网的网关接口,配置对应的IP 地址; 3)分别在3 台接入交换机创建VLAN,为各VLAN 分配Access 口,指定上连核心交换机的trunk 口。本用例以接入交换机Switch A 为例说明配置步骤。
ZHaos
2019/02/27
9960
OpenStack Icehouse私有云实战部署(三)
Networking服务 neutron server节点 在实际部署的架构中,neutron的部署架构可以分为三个角色,即neutron server(neutron服务器)、network node(网络节点)和compute node(计算节点),这里先部署neutron服务器。 安装所需软件包 此处配置的为neutron server服务,根据此前的规划,这里将其部署在控制节点上。 [root@controller ~]# yum install openstack-neutron openstac
小小科
2018/05/04
3K0
OpenStack Icehouse私有云实战部署(三)
Centos7上部署openstack ocata配置详解
之前写过一篇《openstack mitaka 配置详解》然而最近使用发现阿里不再提供m版本的源,所以最近又开始学习ocata版本,并进行总结,写下如下文档
yaohong
2019/09/11
1.7K0
Centos7上部署openstack ocata配置详解
openstack in openstack(在openstack公有云上面搭建openstack 服务)
本文目的:  在基于openstack构建的海航云上面搭建一个包含基本组件的openstack服务,并让该openstack里启动的实例直接通过弹性公网ip被访问。 一、背景知识: 1、海航云:https://www.haihangyun.com  一个基于纯openstack构建的公有云,在我来腾讯之前工作的地方。 2、安全组: openstack对于每个虚拟网卡都提供安全组,在不添加规则情况下,所有流量都是禁止通过。 3、port address pairs。openstack默认只允许从port上发出
用户1057912
2018/07/06
2K0
使用openstack搭建私有云[通俗易懂]
CentOS Linux release 7.6.1810 (Core) 内核版本:3.10.0-957.el7.x86_64
全栈程序员站长
2022/09/14
37.4K0
使用openstack搭建私有云[通俗易懂]
openstarck及OpenNebula对比(附一键安装openstarck脚本)
作用: OpenStack 是一个开源的云计算平台,用于构建和管理公有云和私有云环境。它提供了一组丰富的服务,包括计算、存储、网络和身份认证等,以支持虚拟机管理、对象存储、网络连接和身份验证等功能。
IT运维技术圈
2023/09/07
1.1K0
openstarck及OpenNebula对比(附一键安装openstarck脚本)
13-网络虚拟化与Flat网络
通常每个虚拟机会配置两个业务网口,这样这个云计算中心就有20万个虚拟网口,对应的就是需要20万个MAC地址和IP地址。云计算要求资源灵活调度,业务资源任意迁移。也就是说任意一个虚拟机可以在整个云计算网络中任意迁移。这就要求全网在一个统一的二层网络中。
小朋友呢
2019/12/30
3.9K0
13-网络虚拟化与Flat网络
OpenStack常用命令-持续更新
Apache http服务状态查询 命令语句 systemctl status httpd.service
院长技术
2020/06/15
2.2K0
openstack安装(28)
[root@controller ~]#ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini #网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini。
陈不成i
2021/05/07
3990
从零开始搭建Openstack-Pike(Ubuntu 16.04桌面版)
找一个服务器(自己的电脑也行),使用 Ubuntu-16.04.7 的镜像创建两个虚拟机。
奇门水镜
2021/12/23
2.2K1
从零开始搭建Openstack-Pike(Ubuntu 16.04桌面版)
相关推荐
OpenStack运维之安装Neutron服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验