在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) }