objective c - una - ¿Cómo obtengo el directorio temporal predeterminado en Mac OS X?
no se puede completar la operación porque no tienes el permiso necesario mac (4)
Use la función tempnam (), tmpnam () o tmpfile () .
Me gustaría crear algunos directorios de datos para algunas pruebas de unidades y me gustaría que estos directorios estén en el directorio temporal predeterminado para el usuario.
Podría crear un subdirectorio bajo / tmp, supongo, pero no quiero hacer una suposición sobre cómo alguien ha configurado su propia máquina.
Estoy planeando escribir los datos de prueba sobre la marcha, y es por eso que me gustaría poner esto en un directorio temporal.
En Objective-C puede usar NSTemporaryDirectory ().
No use tmpnam()
o tempnam()
. Son inseguros (ver la página del manual para más detalles). No asuma /tmp
. Use NSTemporaryDirectory()
junto con mkdtemp()
. NSTemporaryDirectory()
le dará un mejor directorio para usar, sin embargo, puede devolver nil
. He usado un código similar a esto:
NSString * tempDir = NSTemporaryDirectory();
if (tempDir == nil)
tempDir = @"/tmp";
NSString * template = [tempDir stringByAppendingPathComponent: @"temp.XXXXXX"];
NSLog(@"Template: %@", template);
const char * fsTemplate = [template fileSystemRepresentation];
NSMutableData * bufferData = [NSMutableData dataWithBytes: fsTemplate
length: strlen(fsTemplate)+1];
char * buffer = [bufferData mutableBytes];
NSLog(@"FS Template: %s", buffer);
char * result = mkdtemp(buffer);
NSString * temporaryDirectory = [[NSFileManager defaultManager]
stringWithFileSystemRepresentation: buffer
length: strlen(buffer)];
Ahora puede crear archivos dentro de temporaryDirectory
. Elimine los NSLogs
para el código de producción.
Mirando hacia atrás a esta pregunta y la documentación para NSTemporaryDirectory (), si está utilizando 10.6 o superior, entonces se recomienda utilizar el URLForDirectory: inDomain: appropriateForURL: create: error: método de NSFileManager para un método más flexible de creación de directorios .
Y devuelve una URL en lugar de una ruta de cadena, que es otra cosa que se recomienda utilizar.