沙盒
一、沙盒有几个目录:
xCode6之前有4个:Documents,Lib,temp,app (两年前)
xCode6有3个:Documents,Lib,tmp
即修改了app的资源目录
二、
最多操作的两个文件:Documents、Caches
Lib下有两个文件:配置文件目录Preferences+缓存目录Caches
三、常用目录
1.家目录(项目的根目录)
获取家目录:NSHomeDirectory();
真机在家目录下是没有读写权限的,不要进行读写操作;
要进行文件操作,可以在Documents和Lib下的Caches下操作
2.Documents
获取Documents目录:
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO)[0];
或
NSURL *url = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0];
NSLog(@"%@",[url relativePath]);
3.Cache
获取Cache目录:NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
4.临时目录
保存比较大的临时数据(如下载`NSURLSessionDownloadTask`),下载完后会自动清除在这个目录下的文件,可在这之前进行文件操作(如另存到别的目录下),
获取临时目录:NSTemporaryDirectory();
获取常用目录:
1 //1.获取家目录(真机没有读写权限)
2 NSHomeDirectory();
3 //2.获取documents路径
4 /*
5 参数1:目录
6 参数2:NSUserDomainMask用户当前用户安装目录(沙盒)
7 参数3:是否显示所有完整路径(YES表示显示,NO表示:~/xxxx)
8 */
9 NSString *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO)[0];
10 NSLog(@"%@",documents);
11 //3.Cache目录
12 NSString *cache = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
13 NSLog(@"%@",cache);
14 //4.获取临时目录:
15 NSTemporaryDirectory();
临时目录应用实例 ---- 下载文件NSURLSessionDownloadTask:
@interface ViewController ()<NSURLSessionDownloadDelegate>
@end
- (void)download
{
//配置session
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
//创建含配置的session请求对象,同时设置代理和线程
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//session.delegate是readonly
//下载的请求,需要走代理方法 ---> 不能用单例创建session
NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:[NSURL URLWithString:@"http://d3.s.hjfile.cn/2012/201202_3/43904b09-24e1-4fdb-8b46-d3dba3323278.mp3"]];
//发送请求
[downloadTask resume];
}
//设置保存目录
- (NSString *)toPath
{
//获取documents路径
NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
//documents/test.mp3
return [documentPath stringByAppendingPathComponent:@"test.mp3"];
}
#pragma mark - NSURLSessionDownloadTaskDelegate
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{
//当前下载保存的临时目录 relativePath:相对路径 description:本地路径
NSString *path = [location relativePath];
NSLog(@"下载完成:%@",path);
/*
path:/Users/Administrator/Library/Developer/CoreSimulator/Devices/8B2B3965-EB5D-41CF-BCD2-9D669B8E8FF4/data/Containers/Data/Application/88B2E4DA-7759-4539-A3E6-8409F2356C24/tmp/CFNetworkDownload_qxfNCy.tmp
path的组成:临时目录/临时文件名.tmp
前往该path,发现找不到路径
原因:下载时,临时保存文件到这个路径,文件名随机生成,如xxx.tmp,下载结束后自动删除该文件
若要保存临时文件,需要将文件移动到documents路径下保存。
*/
//移动到哪个目录
NSString *toPath = [self toPath];
//把当前下载文件移动到目标目录
[[NSFileManager defaultManager] moveItemAtPath:path toPath:toPath error:nil];
}
/**
* 下载进度回调
*
* @param session session
* @param downloadTask downloadTask
* @param bytesWritten 当前段的字节大小
* @param totalBytesWritten 总共下载的字节
* @param totalBytesExpectedToWrite 总大小
*/
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
NSLog(@"%0.2f",(float)totalBytesWritten/totalBytesExpectedToWrite);
}
posted on 2016-03-18 19:19 Wilson_CYS 阅读(213) 评论(0) 编辑 收藏 举报