2010-01-07 12 views
48

Disculpe, pregunta tonta número 2 hoy. ¿Es posible determinar si un archivo está contenido dentro del paquete de la aplicación? Puedo acceder a los archivos sin ningún problema, es decir,¿Cómo se puede determinar si existe un archivo dentro del paquete de la aplicación?

NSString *pathAndFileName = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]; 

Pero no puede encontrar la manera de comprobar si el archivo existe allí en primer lugar.

Saludos

de Dave

+5

una pregunta tonta en absoluto. –

+3

Dado que [[NSBundle mainBundle] pathForResource: fileName ofType: @ "plist"] devolverá NULL si el archivo no existe, por lo que normalmente solo compruebo si (pathAndFileName! = NULL) {// file exists} – jsherk

+0

Puede hacerlo sin código, también. Ver mi tema en otro foro: http://forums.macrumors.com/threads/xcode-6-how-do-i-view-all-files-in-my-main-bundle.1904024/ – moonman239

Respuesta

68
[[NSFileManager defaultManager] fileExistsAtPath:pathAndFileName]; 
+0

Doh! gracias Rob, he estado usando eso para archivos en el directorio de documentos! Se está haciendo tarde. Gracias de nuevo. –

+5

De acuerdo con [esta respuesta] (http://stackoverflow.com/a/7487235/1226722), sin embargo, incluso Apple está recomendando realmente __ "intentar una operación (como cargar un archivo o crear un directorio), buscar errores, y manejar cualquier error de forma elegante de lo que es para tratar de averiguar de antemano si la operación tendrá éxito "__. – gregoltsov

3
NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"filename"]; 
    if(![fileManager fileExistsAtPath:path]) 
    { 
     // do something 
    } 
+0

¡Eso fue! ¡Muchas gracias! – George

+4

Esto está buscando en el directorio de documentos, no en el paquete de la aplicación – richy

15

Este código funcionó para mí ...

NSString *pathAndFileName = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:pathAndFileName]) 
{ 
    NSLog(@"File exists in BUNDLE"); 
} 
else 
{ 
    NSLog(@"File not found"); 
} 

Con suerte, será ayudar a alguien ...

1

Igual @Arkady, pero con Swift 2.0:

En primer lugar, llamar a un método en mainBundle() para ayudar a crear una ruta al recurso:

guard let path = NSBundle.mainBundle().pathForResource("MyFile", ofType: "txt") else { 
    NSLog("The path could not be created.") 
    return 
} 

A continuación, llamar a un método en defaultManager() para comprobar si existe el archivo:

if NSFileManager.defaultManager().fileExistsAtPath(path) { 
    NSLog("The file exists!") 
} else { 
    NSLog("Better luck next time...") 
} 
2

pathForResource se devuelve nil si el recurso no existe. Verificar nuevamente con NSFileManager es redundante.

Obj-C:

if (![[NSBundle mainBundle] pathForResource:@"FileName" ofType:@"plist"]) {            
     NSLog(@"The path could not be created."); 
     return; 
} 

Swift 4:

guard Bundle.main.path(forResource: "FileName", ofType: "plist") != nil else { 
     print("The path could not be created.") 
     return 
} 
no
Cuestiones relacionadas