Список сохраненных файлов в каталоге документов iOS в UITableView?
Я настроил следующий код для сохранения файла в каталог документов:
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 перешел к этому файлу (все в автономном режиме).
также - как я могу просто получить имя файла и заканчивая такими, как "логотип.png " вместо http://www.reddexuk.com/logo.png?
Как я могу это сделать?
8 ответов:
вот метод, который я использую, чтобы получить содержимое каталога.
-(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 pathComponents] lastObject]
Спасибо Алекс,
вот 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 post Sandboxing.
путь ко всем читаемым / записываемым папкам в приложении будет теперь есть хэш в нем, и Apple оставляет за собой право изменить этот путь в любое время. Это будет изменение при каждом запуске приложения наверняка.
вам нужно будет получить путь к нужной папке, и вы не можете жестко закодировать его, как мы привыкли делать в прошлом.
вы просите каталог документов и в возвращаемом массиве он находится в позиции 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; }