在UITableView的iOS文档目录中列出保存的文件?
我已经设置了下面的代码来将文件保存到文档目录中:
NSLog(@"Saving File..."); NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.reddexuk.com/logo.png"]]; AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"logo.png"]; operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Successfully downloaded file to %@", path); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; [operation start];
但是,我希望将每个文件添加到UITableView成功保存。 当UITableView中的文件被轻敲时,我想要一个UIWebView导航到该文件(全部离线)。
另外 – 我怎么才能得到的文件名和结尾,如“logo.png”,而不是http://www.reddexuk.com/logo.png ?
我怎样才能做到这一点?
这里是我用来获取目录内容的方法。
-(NSArray *)listFileAtPath:(NSString *)path { //-----> LIST ALL FILES <-----// NSLog(@"LISTING ALL FILES FOUND"); int count; NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL]; for (count = 0; count < (int)[directoryContent count]; count++) { NSLog(@"File %d: %@", (count + 1), [directoryContent objectAtIndex:count]); } return directoryContent; }
-(NSArray *)findFiles:(NSString *)extension{ NSMutableArray *matches = [[NSMutableArray alloc]init]; NSFileManager *fManager = [NSFileManager defaultManager]; NSString *item; NSArray *contents = [fManager contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] error:nil]; // >>> this section here adds all files with the chosen extension to an array for (item in contents){ if ([[item pathExtension] isEqualToString:extension]) { [matches addObject:item]; } } return matches; }
上面的例子是很明显的。 我希望它回答你第二个问题。
获取目录的内容
- (NSArray *)ls { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory]; NSLog(@"%@", documentsDirectory); return directoryContent; }
要获取最后一个path组件,
[[path pathComponents] lastObject]
感谢Alex,
这里是Swift版本
func listFilesOnDevice() { let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let documentDirectory = paths[0] as! String let manager = NSFileManager.defaultManager() if let allItems = manager.contentsOfDirectoryAtPath(documentDirectory, error: nil) { println(allItems) } }
为了更合理的文件名:
NSString *filename = [[url lastPathComponent] stringByAppendingPathExtension:[url pathExtension]];
我知道这是一个古老的问题,但是这是一个很好的问题,iOS发布沙盒的事情已经发生了变化。
现在,应用程序中所有可读/可写文件夹的path将包含一个哈希值,Apple保留随时更改该path的权利。 它肯定会在每次启动应用程序时发生变化。
你需要得到你想要的文件夹的path,你不能像以前一样能够硬编码。
你要求文档目录,在返回数组中,它位于0处。然后,从那里使用该值提供给NSFileManager以获取目录内容。
下面的代码在iOS 7和8下工作,以返回文档目录中的内容数组。 您可能需要根据自己的喜好对其进行分类。
+ (NSArray *)dumpDocumentsDirectoryContents { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSError *error; NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error]; NSLog(@"%@", directoryContents); return directoryContents; }
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:dir_path]; NSString *filename; while ((filename = [dirEnum nextObject])) { // Do something amazing }
用于枚举目录中的所有文件
Swift 3.x
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] if let allItems = try? FileManager.default.contentsOfDirectory(atPath: documentDirectory) { print(allItems) }