您的位置:首页 > 其它

iPhone文件目录路径

2012-09-05 15:08 225 查看
PathUtility

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

Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录

tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除

Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

在Doucments目录下创建文件

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask , YES);
NSString *fileName = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"myFile"]; //获取Documents目录路径
NSString *content=@"a";
NSData *contentData=[content dataUsingEncoding:NSASCIIStringEncoding];
if ([contentData writeToFile:fileName atomically:YES]) { //data类型数据写入到fileName文件中
NSLog(@">>write ok.");
}


如果写入数据是带有汉字的

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


在其他目录下创建文件

如果要指定其他文件目录,比如Caches目录,需要更换目录工厂常量,上面代码其他的可不变

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


使用NSSearchPathForDirectoriesInDomains只能定位Caches目录和Documents目录。tmp目录,不能按照上面的做法获得目录了,有个函数可以获得应用的根目录:也就是Documents的上级目录,当然也是tmp目录的上级目录。那么文件路径可以这样写:NSHomeDirectory()、NSTemporaryDirectory()

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


使用资源文件

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

NSString *path = [[NSBundle mainBundle] pathForResource:@”demo” ofType:@”plist”];
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:path];


可以编辑一个PathUtility类继承NSObject,便于整个项目使用

1.获取应用程序沙盒的Documents目录路径
+ (NSString *)documentPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}

2.获取临时目录路径
+ (NSString *)tempPath {
return  NSTemporaryDirectory();
}

3.获取文件目录路径
+ (NSString *)documentFilePath:(NSString *)format,... {
va_list args;
va_start(args, format);
NSString *str = [[[NSString alloc] initWithFormat:format arguments:args] autorelease];
va_end(args);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:str];
}

4.获取本地文件目录路径
+ (NSString *)bundleFilePath:(NSString *)format,... {
va_list args;
va_start(args, format);
NSString *str = [[[NSString alloc] initWithFormat:format arguments:args] autorelease];
va_end(args);
return [[[NSBundle mainBundle] bundlePath] stringByAppendingFormat:@"/%@",str];
}


下面表格中的措施,可以用来操作路径:
措施名称描述
+(NSString *)pathWithComponents:components用components创建有效的路径名称
-(NSArray *)pathComponents将路径名称拆分成若干组成部分
-(NSString *)lastPathComponent获取路径名称中最后一个组成部分
-(NSString *)pathExtension获取路径名称中的扩展名(后缀名)
-(NSString *)stringByAppendingPathComponent:path将path添加到已有的路径名称末尾
-(NSString *)stringByAppendingPathExtension:ext将扩展名ext添加到已有的路径名称的最后一个组成部分的末尾
-(NSString *)stringByDeletingLastPathComponent将已有的路径名称的最后一个组成部分删除
-(NSString *)stringByDeletingPathExtension删除已有路径名称的扩展名
-(NSString *)stringByExpandingTildeInPath将路径名称中的~字符展开
-(NSString *)stringByResolvingSymlinksInPath解析路径名称中的符号链接
-(NSString *)stringByStandardizingPath将路径名称标准化
下面表格中的函数 可以用来获取 用户名、用户的主目录路径 还有 临时目录路径:
函数名称描述
NSString *NSUserName(void)获取当前用户的登录名
NSString *NSFullUserName(void)获取当前用户的全名
NSString *NSHomeDirectory(void)获取当前用户的主目录路径
NSString *NSHomeDirectoryForUser(NSString *user)获取用户user的主目录路径
NSString *NSTemporaryDirectory(void)获取临时目录的路径
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息