Foundation提供了C函数NSSearchPathForDirectoriesInDomains来访问沙盒目录下的各个文件夹。
1、获取documents目录
<span style="font-size:14px;">NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentsDirectory = paths[0];
NSLog(@"paths=%@,\n documentsDirectory=%@",paths,documentsDirectory);</span>
打印结果:
2014-03-31 22:33:38.312 Sandbox[587:60b] paths=(
"/Users/sunke/Library/Application Support/iPhone Simulator/7.1/Applications/8B44A2EF-04D5-4C9C-9DA7-A0D8737905A1/Library/Documentation"
),
documentsDirectory=/Users/sunke/Library/Application Support/iPhone Simulator/7.1/Applications/8B44A2EF-04D5-4C9C-9DA7-A0D8737905A1/Library/Documentation
2、获取tmp目录
<span style="font-size:14px;">NSString * tmpPath = NSTemporaryDirectory();
//在该路径结尾拼接上文件名就是该目录下的文件路径
NSString * testFile = [tmpPath stringByAppendingPathComponent:@"hello.txt"];
NSLog(@"testFile = %@",testFile);</span>
打印结果:
2014-03-31 22:42:24.985 Sandbox[623:60b] testFile = /Users/sunke/Library/Application Support/iPhone Simulator/7.1/Applications/8B44A2EF-04D5-4C9C-9DA7-A0D8737905A1/tmp/hello.txt
3、获取library目录
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString * libraryPath = [paths objectAtIndex:0];
NSLog(@"libraryPath = %@",libraryPath);
打印结果:
2014-03-31 22:46:36.674 Sandbox[641:60b] libraryPath = /Users/sunke/Library/Application Support/iPhone Simulator/7.1/Applications/8B44A2EF-04D5-4C9C-9DA7-A0D8737905A1/Library
4、创建自己的目录和文件保存路径
比如我们要在Document目录下创建一个子目录,然后将需要保存的数据写入文件到该子目录。
<span style="font-size:14px;">- (BOOL)addToCache:(NSMutableArray *)array
{
/*获取document目录*/
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentDirectory = [paths objectAtIndex:0];
NSFileManager * fileManger = [NSFileManager defaultManager];
/*创建目录*/
NSString * videoOnlineDirectory = [documentDirectory stringByAppendingPathComponent:@"VideoOnlineCache"];
[fileManger createDirectoryAtPath:videoOnlineDirectory withIntermediateDirectories:YES attributes:nil error:nil];
/*创建文件保存路径*/
NSString * fileName = self.title;
NSString * filePath = [videoOnlineDirectory stringByAppendingPathComponent:fileName];
/*写入文件*/
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:array];
BOOL flag = [data writeToFile:filePath atomically:YES];
NSLog(@"是否已经添加缓存 %d",flag);
return flag;
}</span>
addToCache方法中,首先获取了Document目录,然后通过fileManger的createDirectoryAtPath方法创建一个子目录,然后在该子目录下创建一个保存文件的路径filePath,最后,将需要保存的数据array归档写入该路径。
5、删除目录
有时候应用中的缓存占用空间比较大时,我们需要为用户提供清理缓存的入口。比如我将缓存保存在document目录下,现在需要清理该目录下所有缓存文件。
NSFileManager* manager = [NSFileManager defaultManager];
NSString * folderPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
NSString* fileName;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
[manager removeItemAtPath:fileAbsolutePath error:nil];
}
通过subpathsAtPath获取documents目录下所有文件路径的数组,然后请求一个枚举器遍历文件路径并通过removeItemAtPath方法删除相应文件。