2016-08-23 17:44:00 fanzef2n9 阅读数 305

tmp: 存放临时数据,此目录下的数据不会通过iCloud进行同步

获取tmp的目录

NSString *tmpPath=NSTemporaryDirectory();

下载图片,放在Documents 下的Imgs文件

1.创建文件夹
(
1.获取tmp的目录
2.拼接成我们想要的文件目录 , 接着进行判断是否之前存在该路径
3.假设不存 , 那么进行文件夹的创建
4.判断是否创建成功
)

-(NSString *)createDirInTmp:(NSString *)dirName{

NSString *tmpPath=NSTemporaryDirectory();
//想要的文件夹路径
NSString *dirPath= [tmpPath stringByAppendingPathComponent:dirName];

NSFileManager *fileManager=[NSFileManager defaultManager];

if ( ![fileManager fileExistsAtPath:dirPath]) {
//文件夹的创建
   NSError *error;
   BOOL isSuccess= [fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];

   if (!isSuccess) {
      NSLog(@"error=%@",error.debugDescription);
      dirPath=nil;
  }     
  }
    return dirPath;
}

2.将图片放入Imgs文件夹中
(
1.调用创建文件夹的方法 , 判断文件夹是否为nil
2.如果文件夹不为nil 接着获得每张图片的路径
3.判断每张图片的路径是否之前存在
4.假设不存在,就对每张图片的url进行编码,防止存在中文
5.用NSDate读取每张编码后的图片
6.判断是否读取成功
)

 NSString *imgsDocumentPath= [self createDirInTmp:@"Imgs"];

NSArray *imgsArray=@[@"网上图片1",@"网上图片2"];

 if (imgsDocumentPath !=nil) {
 for (int i=0; i<imgsArray.count; i++) {

  NSString *imgsString =[imgsArray[i] lastPathComponent];
 //获取每张图片的路径
 NSString *imgsPath=[imgsDocumentPath stringByAppendingPathComponent:imgsString];

NSFileManager *fileManager=[NSFileManager defaultManager];

 if (![fileManager fileExistsAtPath:imgsPath]) {
 //将每张图片的url进行编码(防止存在中文)
 NSString *urlString= [imgsArray[i] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

 NSData *data= [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];

  if (data==nil) {
      NSLog(@"网络有问题,请稍后再下载");
     }
     else{
       BOOL isSuccess= [data writeToFile:imgsPath atomically:YES];
       if (isSuccess) {
         NSLog(@"图片下载成功");
       }
      else{
          NSLog(@"下载失败");
        }
    }
   }
  }
 }
2016-06-16 21:51:04 zzzzhy 阅读数 355

iOS Documents、Library跟tmp的作用

iOS Documents、Library和tmp的作用
沙盒(sandbox)

出于安全的目的,应用程序只能将自己的数据和偏好设置写入到几个特定的位置上。当应用程序被安装到设备上时,系统会为其创建一个家目录,这个家目录就是应用程序的沙盒。

目录下共有四个子目录:

Documents 目录:您应该将所有的应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。

AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。

Library 目录:这个目录下有两个子目录:Caches 和 Preferences

Preferences 目录包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好

Caches 目录用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。

tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
2013-04-28 16:56:38 x1135768777 阅读数 14821


1.Documents:

只有用户生成的文件、其他数据及其他程序不能重新创建的文件,应该保存在<Application_Home>/Documents 目录下面,并将通过iCloud自动备份。

2.Library:

可以重新下载或者重新生成的数据应该保存在 <Application_Home>/Library/Caches 目录下面。举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。

3.tmp:

只是临时使用的数据应该保存到 <Application_Home>/tmp 文件夹。尽管 iCloud 不会备份这些文件,但在应用在使用完这些数据之后要注意随时删除,避免占用用户设备的空间

2015-07-21 12:47:36 pengpengpeng85 阅读数 10070

•IOS 应用目录简介

iOS的沙盒机制,应用只能访问自己应用目录下的文件。iOS不像android,没有SD卡概念,不能直接访问图像、视频等内容。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件夹:Documents, LibrarytmpLibrary包含CachesPreferences目录。

  • Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
  • tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
  • Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

•IOS 获取应用沙盒目录

关于定位应用目录主要用到了NSSearchPathForDirectoriesInDomains 和 NSHomeDirectory();

1、NSSearchPathForDirectoriesInDomains 定位到沙盒的Document、Library以及Caches 目录

(1)、定位Document 目录

NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
(2)、定位Library 目录

NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
(3)、定位Caches 目录,Caches 目录位于Library目录下
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

2、定位到tem目录的方法

使用NSSearchPathForDirectoriesInDomains只能定位Caches、Library、Documents目录, tmp目录,不能按照此方法获得,此时可以采用NSHomeDirectory定位到应用程序主目录,也就是Document 的上一层目录

NSString *temp = NSTemporaryDirectory();

3、获取沙盒根目录:NSHomeDirectory()

使用NSHomeDirectory()可以获取到沙盒的根目录,也就是Document的上一层。
利用NSHomeDirectory()我们可以获取沙盒中的任意文件的路径
例如:获取tmp的路径如下所示:

NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];

•IOS NSFileManager文件操作

还是直接上代码吧!

#pragma mark 使用NSSearchPathForDirectoriesInDomains创建文件目录
- (void) createDir {
    
    // NSDocumentDirectory 沙盒 Documents 目录
    // NSLibraryDirectory  沙盒 Library   目录
    // NSCachesDirectory   沙盒 Library/Caches   目录
    // 使用NSSearchPathForDirectoriesInDomains只能定位Caches、Library、Documents目录,tmp目录,不能按照此方法获得
    NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *dataFilePath = [docsdir stringByAppendingPathComponent:@"head"]; // 在指定目录下创建 "head" 文件夹
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    BOOL isDir = NO;
    
    // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:dataFilePath isDirectory:&isDir];
    
    if ( !(isDir == YES && existed == YES) ) {
        
        // 在 Document 目录下创建一个 head 目录
        [fileManager createDirectoryAtPath:dataFilePath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    
    NSLog(@"+++++++++++++++++++%@",dataFilePath);
}


#pragma mark 使用 NSHomeDirectory() 创建文件目录
- (void) createDir {
    
    // NSHomeDirectory():应用程序目录, @"tmp/temp":在tmp文件夹下创建temp 文件夹
    NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/temp"];
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    BOOL isDir = NO;
    
    // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
    
    if ( !(isDir == YES && existed == YES) ) {
        
        // 在 tmp 目录下创建一个 temp 目录
        [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
    }
    
    NSLog(@"+++++++++++++++++++%@",filePath);
}

关于目录/文件的其他操作

#pragma mark fileManager 的其他操作
- (void) fileManager:(NSString *) filePath { // filePath: 文件/目录的路径
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    // 取得一个目录下得所有文件名
    NSArray *files = [fileManager subpathsAtPath:filePath];
    
    // 读取某个文件
    NSData *data = [fileManager contentsAtPath:filePath];
    
    // 删除文件/文件夹
    [fileManager removeItemAtPath:filePath error:nil];
}

转载请指明出处:点击打开链接

2016-08-23 16:49:36 yourjjboom 阅读数 1250

iOS文件系统
当第一次启动app 的时候,iOS操作系统就为此app创建一个文件系统,该文件系统下,默认有四个目录

/*

Document:存储用户在操作app 时产生的数据,在此目录下的数据可以通过iCloud进行同步
Library:用户偏好设置,通常和此类NSUserDefaults 搭配使用,在此目录下的数据可以通过iCloud进行同步
tmp:存放临时数据,此目录下的数据不会通过iCloud进行同步
app包:开发者不会操作此目录,通常是通过此类NSBundle来获取包内资源,例如工程的素材

*/

获取app包的路径的方法

[NSBundle mainBundle];

获取程序的根目录

NSString *rootPath = NSHomeDiretory();

获取根目录下的Documents

NSString *Documents = [rootPath stringByAppendingPathComponent:@"Documents"];

NSString *Documents1 = [rootPath stringByAppendingFormat:@"/Documents"];

最常用的获取Documents目录的方式

NSArray *array = [ NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
//第一个参数为查找的是Documents目录
//第二个参数指定的是将搜索限制在应用程序沙盒中
//第三个参数如果为YES会将检索后的路径中~符号展开为实际路径


NSString *Document2 = [array objectAtIndex:0];

Documents1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDiretory,NSUserDomainMask,YES) objectAtIndex:0];

//下载一个视频文件到Documents目录下的Video文件

NSString *videoPath = [self creatDicInDoments:"Video"]
//-(NSString *)creatDicInDocuments:(NSString *)dirName 创建的方法

if(videoPath != nil){
    NSString *videoUrlString = @"xxx.mp4";

    //lastPathComponent 获得带后缀的文件名
    //pathExtension 不带'.'
    NSString *ddd = [videoUrlString lastPathComponent ];

    //NSString *filePath = [videoPath stringByAppendingPathComponent];

    //如果文件夹中不存在该路径
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if(![fileManager fileExistsAtPath:filePath]){
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:videoUrlString]];

    //用NSFileManager的对象,将文件写入本地
    BOOL isSuccess = [fileManager createFileAtPath:filePath contents:data attributes:nil];

if(isSuccess){
    NSLog(@"视频下载成功");
    NSLog(@"%@",filePath);
}
else{
    NSLog(@"下载失败");
    }
  }
}

获取Library目录

NSString *LibraryPath = [rootPath stringByAppendingPathComponent:@"Library"];
LibraryPath = [NSSearchPathForDiretoriesInDomains(NSLibraryDiretory,NSUserDomainMask,YES) objectAtIndex:0];

//tmp
NSString *tmpString = NSTemporaryDirectory();

NSString *imgsDocumentsPath = [self createDirInTmp:@”Imgs”];

NSArray *imgsArray = @[@”aa.jpg,xx.jpg, bb.jpg”];

if ( imgsDocumentsPath != nil ){
    for ( int i =0 ;i < imgsArray.count ;i++ ){
    NSString *imgsString = [imgsArray[i] lastPathComponent];
    //每一张图片的路径
    NSString *imgsPath = [imgsDocumentsPath stringByAppendingPathComponent:imgsString];
    NSFileManager *fileManager =[NSFileManager dafaultManager];
    if( ![fileManager fileExistsAtPath:imgsPath] ){
    //将每张图片的url进行编码(有一些有中文)
    [NSCharacterSet URLQueryAllowedCharacterSet]
    NSString *urlString = [imgsArray[i] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

    NSData *data = [NSData dataWithContentsOfURL:[NSRUL URLWithString:urlString]];

    if (data == nil){
        NSLog(@"网络炸了,一会儿再搞");
    }
    else{
        BOOL isSuccess = [data writeToFile:imgsPath atomically:YES];
        if(isSuccess){
            NSLog(@"图片下载成功");   
                    }
        else{
            NSLog(@"下载失败");
            }
    }   
    }   
    else{
        NSLog(@"图片已存在");
        }
}
}

将字符串写入本地
NSStrinG *targetString = @”sbnimasi l “;
NSError *error;
BOOL flag = [targetString writeToFile:[imgsDocumentsPath stringByAppendingPathComponent:@”a.txt”] atomically:YES encoding:4 error:&error];
if(flag){
NSLog(@”字符串写入成功”);
}
else{
NSLog(@”失败了 操”);
}

//将数组写入本地
NSArray *array1 = @[@”马蓉”,@”宋祖蓝”,@”宝宝”,@”sb”];
flag = [array1 writeToFile:[imgsDocumentPath stringByAppendingPathComponent:@”array1.txt”] atomically:YES];
if(flag){
NSLog(@”数组写入成功”);
}
else{
NSLog(@”失败”);
}

//将字典写入本地
NSDictionary *dic = @{@”sb”:@”1”,@”sb2”:@”2”,@”sb3”:@”3”};
flag = [dic writeToFile:[imgsDocumentsPath stringByAppendingPathComponent:@”dic.txt”] atomically:YES];
if (flag) {
NSLog(@”写入成功”);
}

//计算文件夹大小
NSFileManager *fileManager = [NSFileManager defaultManager];
//所有文件下的所有文件名
NSArray *fileManagerArray = [fileManager subpathsAtPath:imgsDocumentsPath];

CGFloat count = 0.0;
for (NSString *ele in fileManagerArray){
NSData *data = [NSData dataWithContentsOfFile:[imgsDocumentsPath stringByAppendPathComponent:ele]];
count += data.length;
}
count = count / 1024 / 1024
//%.2f 保留2位小数
NSLog(@”缓存文件的大小为%.2fMB”,count);

//删除文件

for (NSString *ele in fileManagerArray){

BOOL *flag = [fileManager removeItemAtPath:[imgsDocumentsPath stringByAppendingPathComponent:ele] error:nil];
if(flag){
    NSLog(@"删除成功");
}
}

app包,获取包内的图片,显示在UI上

NSBundle *bundle = [NSBundle mainBundle];
NSString *imgPath = [bundle pathForResource:@”8EDD2DE79FF1553E50C64DCCB261BDE8” ofType:@”.jpg”];
NSData *imgData = [NSData dataWithContentsOfFile:imgPath];

/*
通过UI控制器拉到@interface就会生成
@property (weak, nonatomic) IBOutlet UIImageView picImageView;
*/
self.picImageView.image = [UIImage imageWithData:imgData];

}//-(void)viewDidLoad

-(NSString *)createDicInDocuments:(NSString *)dirName{
    //获取Documents的文件路径
    NSString *documents2 = [NSSearchPathForDirectoriesInDomains(NSDocumentDictory,NSUserDomainMask,YES) objectAtIndex:0];

    //拼接成我们想要的文件的路径的字符串
    NSString *dirDocuments = [documents2 stringByAppendinGPathComponent"dirName];
}

    //NSFileManager 单例类(只有一个对象),用于文件的操作
    //单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

NSFileManager *fileManager = [NSFileManager defaultManager];

//判断本地是否存在某个文件或文件夹

BOOL isExist = [fileManager fileExistsAtPath:dirDocuments];
if(!isExist){
    //创建文件夹
    NSError *error;
    BOOL isSuccess = [fileManager createDirectoryAtPath:dirDocuments  withIntermediateDirectories:YES attributes:nil error:&error];

    if(!isSuccess){
        //如果文件创建失败
        NSLog(@"error = %@",error.debugDescription);
        dirDocuments = nil;
    }
}
    return dirDocuments;
}

-(NSString *)createDirInTmp:(NSString *)dirName{

    NSString *tmpPath = NSTemporaryDirectory();
    //想要文件夹路径
    NSString *dirPath = [tmpPath stringByAppendingPathComponent:dirName];

    NSFileManager *fileManager = [NSFileManager defaultManager];//创建单例判断
    if(![fileManager fileExistsAtPath:dirPath]){
    NSError *error;
    BOOL isSuccess = [fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];
    if (!isSuccess){
        NSLog(@"error = %@",error.description);
        dirPath = nil;
                    }
        }
        return dirPath;
}

ios 文件操作

阅读数 290

iOS数据存储方案

阅读数 533

没有更多推荐了,返回首页