求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
iPhone 文件结构和文件操作
 

作者:Luoshengyang,发布于2012-9-18,来源:博客

 

这篇文章主要是针对沙盒存储方式的文件操作,详文如下:

对于一个运行在iPhone得app,它只能访问自己根目录下的一些文件(所谓sandbox - 沙盒).

一个app发布到iPhone上后,它的目录结构如下:

1、其中得 app root 可以用 NSHomeDirectory() 访问到;

2、Documents 目录就是我们可以用来写入并保存文件得地方,一般可通过下面的方式得到:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *documentsDirectory = [paths objectAtIndex:0];  

3、tmp 目录我们可以在里面写入一些程序运行时需要用得数据,里面写入得数据在程序退出后会没有。可以通过 NSString *NSTemporaryDirectory(void); 方法得到;

4、文件一些主要操作可以通过NSFileManage 来操作,可以通过 [NSFileManger defaultManger] 得到它得实例。

相关得一些操作:

a.创建一个目录或者文件:

比如要在Documents下面创建一个test目录,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *documentsDirectory = [paths objectAtIndex:0];  
NSLog(@”%@”,documentsDirectory);  
NSFileManager *fileManage = [NSFileManager defaultManager];  
NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@“test”];  
BOOL ok = [fileManage createDirectoryAtPath:myDirectory attributes:nil];   

比如要在Documents下面创建一个file.txt:

// 结果为:/Documents/file.txt  
NSString *filePath= [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

b.取得一个目录下得所有文件名:

//如上面的myDirectory)可用  
NSArray *file = [fileManager subpathsOfDirectoryAtPath: myDirectory error:nil];  
或  
NSArray *files = [fileManager subpathsAtPath: myDirectory ];  

c.读取某个文件:

NSData *data = [fileManger contentsAtPath:myFilePath];//myFilePath是包含完整路径的文件名  
或直接用NSData 的类方法:  
NSData *data = [NSData dataWithContentOfPath:myFilePath];  

d.保存某个文件:

//可以用 NSFileManager的下列方法:  
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;  
或 NSData 的  
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;  
- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;  

e.删除某个文件:

//可以用 NSFileManager的下列方法:  
  
//Removes the file or directory at the specified path.  
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error  
  
//Removes the file or directory at the specified URL.  
- (BOOL)removeItemAtURL:(NSURL *)URL error:(NSError **)error  

f.移动某个文件或者重命名某文件

//想要重命名一个文件,我们需要把文件移到一个新的路径下。下面的代码创建了我们所期望的目标文件的路径,
  然后请求移动文件以及在移动之后显示文件目录。  
//通过移动该文件对文件重命名  
NSString *filePath2= [documentsDirectory stringByAppendingPathComponent:@"file2.txt"];  
//判断是否移动  
if ([fileManager moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)  
NSLog(@"Unable to move file: %@", [error localizedDescription]);  
//显示文件目录的内容  
NSLog(@"Documentsdirectory: %@",[fileManager contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);   

iPhone官方SDK用于读写数据的方法

我们知道,出于安全考虑,iPhone的官方SDK并不能像toolchain一样随意写文件。

注意:这两个方法都是存储在/Documents/里面。

bool writeApplicationData(NSData *data, NSString *fileName)  
    
{  
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    
    NSString *documentsDirectory = [paths objectAtIndex:0];  
    
    if (!documentsDirectory) {  
    
        NSLog(@"Documents directory not found!");  
    
        return NO;  
    
       }  
    
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];  
   
    return ([data writeToFile:appFile atomically:YES]);  
   
}  
   
           
   
NSData *applicationDataFromFile(NSString *fileName)  
   
{  
   
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
   
   NSString *documentsDirectory = [paths objectAtIndex:0];  
   
   NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];  
   
   NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease];  
   
   return myData;  
}  

相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程

 
分享到
 
 
     


android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...