Elenco file in una directory e tutte le sotto cartelle

Di seguito è riportato, in poche righe di codice Objective-C, la tecnica giusta per attraversare rapidamente una directory e tutte le sue sottodirectory.

Cominciamo con una struttura di file nella cartella Documenti che ho usato per il mio esempio:

fileDir

L’esempio della struttura riguarda il simulatore in quanto per questo esempio lo andremo ad utilizzare, ma la struttura avrà la stessa forma nel caso ci spostassimo sul dispositivo. Ci penserà il sistema operativo iOS a fare le dovute “conversioni”.

NSFileManager *fileMgr;
NSString *entry;
NSString *documentsDir;
NSDirectoryEnumerator *enumerator;
BOOL isDirectory;
// creo il file manager
fileMgr = [NSFileManager defaultManager];
// localizzo la cartella documenti
documentsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

// sposto il file manager nella cartella documenti
[fileMgr changeCurrentDirectoryPath:documentsDir];

// enumero i documenti contenuti
enumerator = [fileMgr enumeratorAtPath:documentsDir];

// scorro ogni elemento
while ((entry = [enumerator nextObject]) != nil){
  // file o cartella
  if ([fileMgr fileExistsAtPath:entry isDirectory:&isDirectory] && isDirectory)
    NSLog (@"Cartella - %@", entry);
  else
    NSLog (@"  File - %@", entry);
}

Il codice sembra lungo, ma in realtà è molto semplice: inizializziamo il file manager che ci consente di leggere, scrivere e, nel nostra caso, di manipolare attributi di file e cartelle. Localizziamo la cartella Documenti, l’unica che possiamo raggiungere se ci troviamo sul dispositivo (in realtà ce ne sono altre ma è preferibile usare questa per archiviare i documenti usati dall’app) ed impostiamo il file manager per lavorare su di essa.

Il metodo enumeratorAtPath: è il più importante e ci consente di scorrere le cartelle e le sottocartelle, dopodiché indichiamo se si tratti di un file o una cartella nella console, o eventualmente potremmo creare una tabella che contenga tutti i dati estratti per visualizzarli.

Abbiamo concluso.