Cocoa提供的功能确实有限,这种东西都给无情的封装了,真是悲剧

给出底层API的话也可以解决这个问题,不过现在还没真正用到需要判断哪些文件是隐藏的只是想简单跳过去。

现在要实现的是:

选取一个文件夹,获取里面所有的文件夹路径,并把每一个文件夹里的文件和它关联起来,生成一个Dictionary,这里不是用的递归。所以请放心看代码,遇到以'.'开头的文件就跳过去。其实不是真下的解决办法。

 

  1. -(NSMutableDictionary*)subLevelFoldersForFolderContentUrl:(NSString*)folderUrl 
  2.     NSFileManager * fileManager = [NSFileManager defaultManager]; 
  3.     NSMutableArray * openList = [NSMutableArray array]; 
  4.     NSMutableDictionary * folderDictionaryList = [NSMutableDictionary dictionary]; 
  5.     [openList addObject:folderUrl]; 
  6.     while ([openList count] > 0)  
  7.     { 
  8.         NSString * _path = [openList objectAtIndex:0]; 
  9.         [openList removeObjectAtIndex:0]; 
  10.         [folderDictionaryList setObject:[NSMutableDictionary dictionary] forKey:_path]; 
  11.         // every items is a class if NSString,it's just a path. 
  12.         NSString * prepSupPath = [_path stringByAppendingString:@"/"]; 
  13.         NSArray * chilrenItems = [fileManager contentsOfDirectoryAtPath:_path error:nil]; 
  14.          
  15.         NSLog(@"class name: %@ ",[[chilrenItems objectAtIndex:0] class]); 
  16.         for (NSString * item in chilrenItems )  
  17.         { 
  18.             NSString * subitemPath = [prepSupPath stringByAppendingString:item ]; 
  19.             NSDictionary * attribute = [fileManager attributesOfItemAtPath:subitemPath  error:nil]; 
  20.              
  21.             NSLog(@"item:%@, %@",item,[attribute description]); 
  22.             if ([[attribute objectForKey:NSFileType] isEqualToString:NSFileTypeDirectory])  
  23.             { 
  24.                 // skip application files , a folder name end with ".app" intends it's a application 
  25.                 if (![[subitemPath pathExtension] isEqualToString:@"app"])  
  26.                 { 
  27.                     [openList addObject:subitemPath]; 
  28.                 } 
  29.             } 
  30.             else  
  31.             { 
  32.                 // skip files , which name begin with '.' , mostly it's a hidden file 
  33.                 if ([[subitemPath lastPathComponent] characterAtIndex:0] == '.')  
  34.                 { 
  35.                     continue
  36.                 } 
  37.                 NSMutableDictionary * folderDic = [folderDictionaryList objectForKey:_path]; 
  38.                 if ([folderDic objectForKey:@"files"] == nil)  
  39.                 { 
  40.                     [folderDic setObject:[NSMutableArray array]  forKey:@"files"]; 
  41.                 } 
  42.                 NSMutableArray * filesArray = [folderDic objectForKey:@"files"]; 
  43.                 [filesArray addObject:subitemPath]; 
  44.             } 
  45.         } 
  46.          
  47.     } 
  48.     return folderDictionaryList;