iOS中NSSearchPathForDirectoriesInDomains函数

转载博客主:liliangchw

iOS中NSSearchPathForDirectoriesInDomains函数参数 NSDocumentDirectory, NSDocumentationDirectory, NSDownloadsDirectory的意义

刚在写程序的时候把全部参数都测试了下,这样本身能够记住,下面是测试结果:
NSDocumentDirectory 缓存

-(NSString *) dataFilePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory=[paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:@"data.plisg"]; }


return value: app

path:/Users/admin/Library/Application Support/iPhone Simulator/5.0/Applications/4BC5DA66-B3CA-4056-927B-999BC4DBF3CE/Documents/data.plist

NSDocumentationDirectory ssh

-(NSString *) dataFilePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory , NSUserDomainMask, YES); NSString *documentsDirectory=[paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:@"data.plisg" ]; }

return value: 函数

path:/Users/admin/Library/Application Support/iPhone Simulator/5.0/Applications/4BC5DA66-B3CA-4056-927B-999BC4DBF3CE/Library/Documentation/data.plist

NSDownloadsDirectory 测试

-(NSString *) dataFilePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory, NSUserDomainMask, YES); NSString *documentsDirectory=[paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:@"data.plisg" ]; }

return value: 编码

path:/Users/admin/Library/Application Support/iPhone Simulator/5.0/Applications/4BC5DA66-B3CA-4056-927B-999BC4DBF3CE/Downloads/data.plisg


转自:http://marshal.easymorse.com/archives/3340

iOS中对文件的操做

由于应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: atom

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

在Documents目录下建立文件

代码以下: spa

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
                                            , NSUserDomainMask 
                                            , YES); 
NSLog(@"Get document path: %@",[paths objectAtIndex:0]); .net

NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"]; 
NSString *content=@"a"; 
NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding]; 
if ([contentData writeToFile:fileName atomically:YES]) {
    NSLog(@">>write ok."); 
} code

能够经过ssh登陆设备看到Documents目录下生成了该文件。

上述是建立ascii编码文本文件,若是要带汉字,好比:

NSString *fileName=[[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"]; 
NSString *content=@"更深夜静人已息"; 
NSData *contentData=[content dataUsingEncoding:NSUnicodeStringEncoding]; 
if ([contentData writeToFile:fileName atomically:YES]) {
    NSLog(@">>write ok."); 
}

若是还用ascii编码,将不会生成文件。这里使用NSUnicodeStringEncoding就能够了。

经过filezilla下载到建立的文件打开,中文没有问题:

image

在其余目录下建立文件

若是要指定其余文件目录,好比Caches目录,须要更换目录工厂常量,上面代码其余的可不变:

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory
                                                , NSUserDomainMask 
                                                , YES);

 

使用NSSearchPathForDirectoriesInDomains只能定位Caches目录和Documents目录。

tmp目录,不能按照上面的作法得到目录了,有个函数能够得到应用的根目录:

NSHomeDirectory()

也就是Documents的上级目录,固然也是tmp目录的上级目录。那么文件路径能够这样写:

NSString *fileName=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/myFile.txt"];

或者,更直接一点,能够用这个函数:

NSTemporaryDirectory()

不过生成的路径将多是:

…/tmp/-Tmp-/myFile.txt

使用资源文件

在编写应用项目的时候,经常会使用资源文件,好比:

image

安装到设备上后,是在app目录下的:

image

如下代码演示如何获取到文件并打印文件内容:

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);

 

代码运行效果:

image

相关文章
相关标签/搜索