2011-07-05 15 views
14

Estoy utilizando el código de abajo para guardar una imagen en el NSDocumentDirectorylongitud máxima del nombre del archivo

-(BOOL)saveImage:(UIImage *)image name:(NSString *)name{ 

    NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *path = [NSString pathWithComponents:[NSArray arrayWithObjects:dir, name, nil]]; 

    BOOL ok = [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]; 

    if (!ok) { 
     NSLog(@"Error creating file %@", path); 
    } 
    else { 
     NSFileHandle* myFileHandle = [NSFileHandle fileHandleForWritingAtPath:path]; 
     [myFileHandle writeData:UIImagePNGRepresentation(image)]; 
     [myFileHandle closeFile]; 
    } 
    return ok; 
} 

el nombre suele ser la URL de donde se descargó la imagen.

¿Existe alguna limitación en la longitud del nombre del archivo? Que a veces las direcciones URL pueden ser super largo ...

agradecimiento

Respuesta

29

Echando un vistazo a la constante PATH_MAX en syslimits.h: 91

... 
#define PATH_MAX   1024 /* max bytes in pathname */ 
... 

Usted puede probar esto por sí mismo haciendo:

NSLog(@"%i", PATH_MAX); 

simplemente para asegurarse.

+15

También vale la pena señalar la longitud del componente de nombre de archivo de una ruta - en el mismo encabezado '#define NAME_MAX 255'. – petert

+0

Esto debe incluirse en la respuesta – Minimi

+1

En la práctica, puede ser prudente permanecer un poco por debajo de PATH_MAX para las rutas a los recursos dentro de la aplicación según [esta publicación] (https://deciphertools.com/blog/2014_10_01_beware_of_long_pathnames/). Sugiere 932 caracteres como máximo de trabajo, ya que aparentemente el uso de directorios intermedios durante una operación de copia de seguridad de iTunes/iCloud puede hacer que la longitud total de la ruta exceda PATH_MAX, lo que da como resultado la falla de la copia de seguridad/restauración de su aplicación. – user2067021

Cuestiones relacionadas