Получение списка файлов в папке ресурсы-iOS
допустим, у меня есть папка в папке "ресурсы" моего приложения iPhone под названием "Документы".
есть ли способ, что я могу получить массив или список всех файлов, включенных в эту папку во время выполнения?
Так, в коде это будет выглядеть так:
NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];
это возможно?
7 ответов:
вы можете получить путь к как это
NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
затем добавить
Documents
путь,NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];
тогда вы можете использовать любой из API списка каталогов
NSFileManager
.NSError * error; NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
Примечание : при добавлении исходной папки в пакет убедитесь, что вы выбрали опцию "Создать ссылки на папки для любых добавленных папок при копировании"
Swift
обновлено для Swift 3
let docsPath = Bundle.main.resourcePath! + "/Resources" let fileManager = FileManager.default do { let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath) } catch { print(error) }
читайте далее:
вы также можете попробовать этот код:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSError * error; NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error]; NSLog(@"directoryContents ====== %@",directoryContents);
Swift версия:
if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){ for file in files { print(file) } }
Список Всех Файлов В Каталоге
NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *bundleURL = [[NSBundle mainBundle] bundleURL]; NSArray *contents = [fileManager contentsOfDirectoryAtURL:bundleURL includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension ENDSWITH '.png'"]; for (NSString *path in [contents filteredArrayUsingPredicate:predicate]) { // Enumerate each .png file in directory }
Рекурсивное Перечисление Файлов В Каталоге
NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *bundleURL = [[NSBundle mainBundle] bundleURL]; NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey] options:NSDirectoryEnumerationSkipsHiddenFiles errorHandler:^BOOL(NSURL *url, NSError *error) { NSLog(@"[Error] %@ (%@)", error, url); }]; NSMutableArray *mutableFileURLs = [NSMutableArray array]; for (NSURL *fileURL in enumerator) { NSString *filename; [fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil]; NSNumber *isDirectory; [fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; // Skip directories with '_' prefix, for example if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) { [enumerator skipDescendants]; continue; } if (![isDirectory boolValue]) { [mutableFileURLs addObject:fileURL]; } }
подробнее о NSFileManager its здесь
Swift 3 (и возвращая url)
let url = Bundle.main.resourceURL! do { let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles) } catch { print(error) }
Swift 4:
Если вам нужно сделать с подкаталогами "относительно проекта" (синие папки) вы можете написать:
func getAllPListFrom(_ subdir:String)->[URL]? { guard let fURL = Bundle.main.urls(forResourcesWithExtension: "plist", subdirectory: subdir) else { return nil } return fURL }
использование:
if let myURLs = getAllPListFrom("myPrivateFolder/Lists") { // your code.. }