一、沙盒介绍
1、沙盒中有四个文件:
(1)应用程序包:包含所有的资源文件和可执行文件
(2)Document目录:通常存放应用运行时生成的需要保存的文件。iTunes同步设备时会备份该目录。
(3)Library目录:Library目录下又有Caches和Preferences两个子目录。
A、Caches与Doucument一样可以保存应用运行时生成的需要保存的文件,但是iTunes不会备份该目录。
在web服务应用里面,通常会将从服务器得到的数据保存在这个目录下。如果数据丢失,再去服务器获得,所有这个目录下的文件不会被iTunes备份。
B、Preferences放置应用的偏好设置,iOS的设置应用从这里获取该应用的设置。iTunes会备份这个目录。
(4)tmp目录:保存运行时的临时数据,应用停止时,系统会清理该目录下的文件。
2、沙盒文件的路径:
(1)NSString *NSHomeDirectory(void)返回沙盒自身的路径
(2)沙盒下的目录路径可以通过拼接沙盒的路径得到,也可以通过
NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearchPathDomainMask domainMask, BOOL expandTilde)得到。
A、第一个参数为
NSDocumentDirectory和NSCachesDirectory、NSLibraryDirectory分别得到document和caches、library的路径。
后面两个参数固定传入NSUserDomainMask和YES.
B、该函数返回的是数组,在iOS里面,直接取数组的第一个元素。
(3)NSTemporaryDirectory()得到tmp的路径
3、不能在沙盒的根目录下创建文件,可以在三个子目录里面创建文件。
使用
NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearchPathDomainMask domainMask, BOOL expandTilde)得到的路径会比拼接沙盒路径得到的安全。
二、文件操作
1、创建文件
[fileManager createDirectoryAtPath:photoPathwithIntermediateDirectories:YESattributes:nilerror:nil];
2、删除文件
NSFileManager *manager = [NSFileManagerdefaultManager];
[managerremoveItemAtPath:tmpDirectory error:nil];
注意:如果路径是文件夹,会连同文件夹和文件夹中的内容一起删除。
如果只想删除文件夹中的所有内容,而不像删除文件夹本身,就得进入文件夹,采用枚举,将里头的文件一个一个删除
3、访问文件
4、写入文件
5、文件属性
参考文章:http://blog.sina.com.cn/s/blog_620d3c8601010gme.html
1、获得文件夹中的所有文件的大小
//单个文件的大小
- (longlong) fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager = [NSFileManagerdefaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[managerattributesOfItemAtPath:filePath error:nil]fileSize];
}
return 0;
}
//遍历文件夹获得文件夹大小,返回多少M
- (float ) folderSizeAtPath:(NSString*) folderPath{
NSFileManager* manager = [NSFileManagerdefaultManager];
if (![manager fileExistsAtPath:folderPath])
{
return 0;
}
NSEnumerator *childFilesEnumerator = [[managersubpathsAtPath:folderPath] objectEnumerator];
NSString* fileName;
long long folderSize =0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [selffileSizeAtPath:fileAbsolutePath];
}
return folderSize/(1024.0*1024.0);
}
注意:只能用这种方法得到文件夹中的所有文件的大小,[[manager attributesOfItemAtPath:filePath error:nil] fileSize],单位字节,作用于一个文件夹得到的是文件夹本身的一些内容的大小,而不是文件夹中的所有文件的大小。[managersubpathsAtPath:folderPath]返回目录内子文件名称,返回类型nsarray。