2014年4月2日 星期三

ios文件和文件夹管理

http://blog.csdn.net/chaoyuan899/article/details/17416677

获得磁盘上最常用文件夹的路径

  我们知道,苹果上的应用程序都是运行在自己的沙盒中的,很少也没有足够的权限跟沙盒外面的文件资源打交道,一般一个应用的文件目录如下:


  想要获得应用目录下的文件夹路径最常用的操作:
NSFileManager类的URLsForDirectory:inDomains: 实例方法允许你在IOS的文件系统中搜索指定的目录,特别是在你应用的沙箱中.此方法有两个参数:

URLsForDirectory: 
此参数是你将要搜索的字典对象.为此参数传递一个NSSearchPath类型的目录字典.我将在稍后详细讨论此参数
inDomains: 
此参数指定你在哪儿搜索给定的目录.此参数必须是一NSSearchDomainMask的枚举值
  假设你要获得你应用的 Document 文件夹路径,你会发现是如此简单:

  1. NSFileManager *fileManager = [[NSFileManager alloc] init];  
  2.    NSArray *urls = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];  
  3.    if ([urls count] > 0) {  
  4.        NSURL *documentsFolder = urls[0];  
  5.        NSLog(@"%@",documentsFolder);  
  6.    }else{  
  7.        NSLog(@"Could not find the Documents folder");  
  8.    }  

  下面是 NSFileManager 类实例方法 URLsForDirectory:inDomains:的所有你可以传递的重要参数值:

URLsForDirectory

      NSLibraryDirectory    标记应用的library文件夹
      NSCachesDirectory   标记caches文件夹,在之前解释说明过
      NSDocumentDirectory   标记document文件夹
inDomains 
      NSUserDomainMask   标记对文件夹路径的搜索在当前用户文件夹下进行.OS X,此文件夹为~/. 
  如果你想获得 tmp 文件夹的路径,请像这样使用 C 函数 NSTemporaryDirectory( );

  1. NSString *tempDirectory = NSTemporaryDirectory();  
  2.         NSLog(@"Temp Directory = %@",tempDirectory);  


  •   对文件进行读写操作 
  1. //写  
  2. -(BOOL)writeText:(NSString *)paramText toPath:(NSString *)paramPath{  
  3.     return [paramText writeToFile:paramPath atomically:YES encoding:NSUTF8StringEncoding error:nil];  
  4. }  

  1. //读  
  2. -(NSString *)readTextFromPath:(NSString *)paramPath{  
  3.     return [[NSString alloc] initWithContentsOfFile:paramPath encoding:NSUTF8StringEncoding error:nil];  
  4. }  

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.       
  5.     NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"MyFile.txt"];  
  6.     if ([self writeText:@"Hello,World!" toPath:filePath]) {  
  7.         NSString *readText = [self readTextFromPath:filePath];  
  8.         if ([readText length]) {  
  9.             NSLog(@"Text read from disk = %@",readText);  
  10.         }else{  
  11.             NSLog(@"Failed to read the text from disk");  
  12.         }  
  13.     }else{  
  14.         NSLog(@"Failed to write the file");  
  15.     }  
  16. }  


  以数组的形式保持到文件:
  1. NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"MyFile.txt"];  
  2. NSArray *arrayOfNames = @[@"Steve",@"John",@"Aaron"];  
  3. if ([arrayOfNames writeToFile:filePath atomically:YES]) {  
  4.     NSArray *readArray = [[NSArray alloc] initWithContentsOfFile:filePath];  
  5.     if ([readArray count]) {  
  6.         NSLog(@"Read the array back from disk just fine");  
  7.     }else{  
  8.         NSLog(@"Failed to read the array back from disk");  
  9.     }  
  10. }else{  
  11.     NSLog(@"Failed to save the array to disk");  
  12. }  

  NSArray类的实例方法writeToFile:atomiclly只能保存包含如下对象类型的数组: 
  NSString 
  NSDictionary 
  NSArray 
  NSData 
  NSNumber 
  NSDate 
  如果你试图在数组中插入其他的对象,则数据将无法被保存到磁盘。


字典具有和数组类似的进行数据写磁盘及读数据回字典对象的方式.方法名称也完全 相同,且数组的保存规则同样适用于字典

  1. NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"MyFile.txt"];  
  2. NSDictionary *dict = @{@"firstName"@"Aaron",  
  3.                        @"lastName":@"zheng",  
  4.                        @"age":@"21"};  
  5. if ([dict writeToFile:filePath atomically:YES]) {  
  6.     NSDictionary *readDictionary = [[NSDictionary alloc] initWithContentsOfFile:filePath];  
  7.     if ([readDictionary isEqualToDictionary:dict]) {  
  8.         NSLog(@"The file we read is the same one as the one we saved");  
  9.     }else{  
  10.         NSLog(@"Failed to read the dictionary from disk");  
  11.     }  
  12. }else{  
  13.     NSLog(@"Failed to write the dictionay to disk");  
  14. }  



  • 在磁盘中创建一个文件夹:

  1. //在磁盘中创建一个文件夹  
  2. -(void)createDirectory{  
  3.     NSFileManager *fileManager = [[NSFileManager alloc] init];  
  4.     NSString *tempDir = NSTemporaryDirectory();  
  5.     NSString *path = [tempDir stringByAppendingPathComponent:@"images"];  
  6.       
  7.     NSError *error;  
  8.     if ([fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error]) {  
  9.         NSLog(@"Successfully created the directory");  
  10.     }else{  
  11.         NSLog(@"Failed to create the directory , ERROR = %@",error);  
  12.     }  
  13. }  

 上面的 withIntermediateDirectories:YES 参数设置为YES,则在创建最深层文件夹的时候,若父文件夹不存在,系统会直接帮你创建好。

  • 删除文件及文件夹

  1. //删除文件及文件夹  
  2. -(void)removeDir{  
  3.     NSFileManager *fileManager = [[NSFileManager alloc] init];  
  4.     NSString *tempDir = NSTemporaryDirectory();  
  5.     NSString *path = [tempDir stringByAppendingString:@"images"];  
  6.       
  7.     NSError *error;  
  8.     if([fileManager removeItemAtPath:path error:&error] == NO){  
  9.         NSLog(@"Failed to remove path %@, ERROR = %@",path,error);  
  10.     }  
  11.       
  12. }  



好了,就先写到这里吧,,不想写了,有时间在写写关于磁盘中文件的安全处理,附注:文中的示例都是摘自《ios 6 Programming Cookbook》一书,由DevDiv网友自发组织翻译,支持技术和信息的共享!

沒有留言:

張貼留言