2012-08-30 9 views
26

Supponiamo di disporre di un insieme arbitrario di file inclusi nel pacchetto di app principale. Vorrei recuperare gli URL dei file per quelli al momento del lancio e memorizzarli da qualche parte. È possibile utilizzare NSFileManager? La documentazione non è chiara al riguardo.Ottenere riferimenti/percorsi file bundle all'avvio dell'app

Nota: ho solo bisogno degli URL dei file, non è necessario accedere ai file effettivi.

+0

Che cos'è un "riferimento file"? Sentiero? URL? Che cosa? –

+0

Per riferimento al file intendo l'URL del file –

risposta

59

È possibile ottenere l'URL di un file nel pacchetto principale utilizzando

NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 

Puoi scrivere questo URL, ad esempio, un file di elenco di proprietà nella directory Documenti:

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"]; 
[dict writeToFile:plistPath atomically:YES]; 

se non si conoscono i nomi dei file e si desidera solo per elencare tutti i file nel pacchetto, utilizzare

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL]; 
for (NSString *fileName in files) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    // do something with `url` 
} 
+0

Cosa succede se non conosco i nomi dei file, voglio semplicemente ottenere tutti i file lì? –

+0

@AndrewLauerBarinov quindi puoi leggere i documenti di NSFileManager. (Ma guarda la modifica, comunque ...) –

+0

Grazie per le informazioni aggiuntive! –

2

Sì, si otterrebbe il loro percorso:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"]; 
NSURL *fileURL = [NSURL fileURLWithPath:path] 

// save it as any other object or in a dictionary: 

[myMutableDictionary setObject:fileURL forKey:@"file1.png"]; 

EDIT: per ottenere l'elenco completo dei file, utilizzare il NSFileManager, ottenere il percorso per il bundle stesso, poi a piedi ogni directory ottenere i file, rendendo URL e salvarli da qualche parte. C'è una gran quantità di codice su SO come camminare su una directory per farlo. [Si consiglia di aggiornare la tua domanda per essere più precisi su ciò che si vuole, questo non è stato chiarito a tutti originariamente]

+1

E se non conosco i nomi dei file, voglio semplicemente ottenere tutti i file lì? –

0

C'è un'API su NSBundle (documentation) accessibile 10.6 o IOS 4 per ottenere un NSURL direttamente, invece di passare un percorso per il NSURL costruttore:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext; 

Ha anche varianti che prendono un subdirectory e localizationName, lo stesso degli equivalenti -pathForResource:.

Problemi correlati