Very short snippet: Apple iPhone file system

sabato 21 novembre, 2009

Sia sul Mac OS X che sull'iPhone OS, abbiamo la possibilità di accedere in modo semplice e diretto alle directory - più importanti - di sistema, che sono:

CODE:
  1. NSHomeDirectory         Returns the path to the current user’s home directory.
  2. NSHomeDirectoryForUser  Returns the path to a given user’s home directory.
  3. NSTemporaryDirectory    Returns the path of the temporary directory for the current user.

Ecco il codice necessario per utilizzarle:

Objective-C:
  1. // Directory principali
  2. NSString *homePath = NSHomeDirectory();
  3. NSString *tempPath = NSTemporaryDirectory();   
  4. NSString *userPath = NSHomeDirectoryForUser( NSUserName() );
  5. NSLog(@"homePath = %@", homePath);
  6. NSLog(@"tempPath = %@", tempPath);
  7. NSLog(@"userPath = %@", userPath);
  8.  
  9. // homePath = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905
  10. // tempPath = /private/var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/tmp/
  11. // userPath = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905

Nota: avete notato, riga 4, la chiamata a NSUserName() che ritorna il "current user"

Esistono, poi, tutta una serie di altre "cartelle" a cui possiamo accedere. Queste possono essere ottenute attraverso la chiamata alla funzione NSSearchPathForDirectoriesInDomains() passandogli come inputs una serie di costanti. Ad esempio possiamo ottenere la cartella Documents in questo modo:

Objective-C:
  1. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  2. NSLog(@"paths = %@", paths);
  3.  
  4. // paths = ( "/var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/Documents" )
  5.  
  6. // Cartella Documents
  7. NSString *documentsPath = [paths objectAtIndex:0];
  8. NSLog(@"documentsPath = %@", documentsPath);
  9.  
  10. // documentsPath = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/Documents
  11.  
  12. // Oppure...
  13. NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
  14. NSLog(@"documentsDirectory = %@", documentsDirectory)
  15.  
  16. // documentsDirectory = /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/Documents

Nota: in questo ultimo caso notate l'uso di stringByAppendingPathComponent che "concatena" Documents al path, aggiungendo lo slash

NSSearchPathForDirectoriesInDomains() ritorna sempre un array di stringhe, anche se nella maggiornaza dei casi gli elementi sono solo uno. Se guardate bene l'output di paths, infatti, viene indicato tra parentesi, cioè un'array. Nel primo caso viene estratto il primo elemento con [paths objectAtIndex:0].

Risorse

Tramite l'oggetto NSBundle, invece, accediamo alla cartella delle risorse di una applicazione; come già sapete, l'estensione .app delle applicazioni Mac è "virtuale", per non dire fittizia. Essa, infatti, cela una sorta di "cartella" con all'interno tutte le risorse necessarie all'applicazione stessa, tra cui l'eseguibile vero e proprio! :)

Objective-C:
  1. // Applicazione
  2. NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];
  3. NSLog(@"appFolderPath = %@", appFolderPath);   
  4.  
  5. // appFolderPath = /var/mobile/Applications/54A1A3C9-322E-4C23-B096-45869B0332A5/MyApp.app

Elencare il contenuto di una cartella (browsing)

Il File Management, gestito dall'oggetto NSFileManager, permette di eseguire moltissime utili operazioni come:

  • Creare directory e file
  • Copiare, spostare e "linkare" file e directory
  • Confrontare file e directory
  • Ottenere il contenuto di directory
  • e altro ancora...

Ad esempio...

Objective-C:
  1. // Elenco Directory
  2. NSString      *homePath    = NSHomeDirectory();
  3. NSFileManager *fileManager = [NSFileManager defaultManager];
  4. NSLog(@"La cartella %@ contiene = %@", homePath, [fileManager directoryContentsAtPath: homePath]);
  5.  
  6. // La cartella /var/mobile/Applications/C7B94C13-DCEC-40CD-942F-93FD302BF905/ contiene = (
  7. // Documents,
  8. // Library,
  9. // "MyApp.app",
  10. // tmp
  11. // )

Bonus

Per quanto riguarda le informazioni "utente" abbiammo:

Objective-C:
  1. // FullUserName
  2. NSString *fullUserName = NSFullUserName();
  3. NSLog(@"fullUserName = %@", fullUserName);
  4. // fullUserName = Mobile User
  5.    
  6. // NSUserName
  7. NSString *userName = NSUserName();
  8. NSLog(@"userName = %@", userName);
  9. // userName = mobile
  10.    
  11. // NSHomeDirectoryForUser
  12. NSString *directoryForUser = NSHomeDirectoryForUser( userName );
  13. NSLog(@"directoryForUser = %@", directoryForUser);
  14. // directoryForUser = /var/mobile/Applications/DFD6AED2-6B14-4515-8DCD-2AF6F6C2E00C

Lascio a voi provare le "differenze" tra l'uso del simulatore e il device.

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL