Digamos que eu tenha uma pasta na pasta "Recursos" do meu aplicativo para iPhone chamada "Documentos".
Existe uma maneira de obter uma matriz ou algum tipo de lista de todos os arquivos incluídos nessa pasta em tempo de execução?
Portanto, no código, seria semelhante a:
NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];
Isso é possível?
Drag & Drop
uma pasta ao projeto e o conteúdo será copiado. Ou Adicione umaCopy Files
fase de construção e especifique o diretório a ser copiado.Create folder references for any added folders
opção ao copiar?Rápido
Atualizado para Swift 3
let docsPath = Bundle.main.resourcePath! + "/Resources" let fileManager = FileManager.default do { let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath) } catch { print(error) }
Leitura adicional:
fonte
Você também pode tentar este código:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSError * error; NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error]; NSLog(@"directoryContents ====== %@",directoryContents);
fonte
Versão Swift:
if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){ for file in files { print(file) } }
fonte
Listando todos os arquivos em um diretório
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 }
Enumeração recursiva de arquivos em um diretório
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]; } }
Para mais informações sobre o NSFileManager, está aqui
fonte
Swift 3 (e URLs de retorno)
let url = Bundle.main.resourceURL! do { let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles) } catch { print(error) }
fonte
Swift 4:
Se você tem a ver com subdiretórios "Relativo ao projeto" (pastas azuis), você pode escrever:
func getAllPListFrom(_ subdir:String)->[URL]? { guard let fURL = Bundle.main.urls(forResourcesWithExtension: "plist", subdirectory: subdir) else { return nil } return fURL }
Uso :
if let myURLs = getAllPListFrom("myPrivateFolder/Lists") { // your code.. }
fonte