2011-07-30 14 views
6

Quiero almacenar las imágenes tomadas desde la cámara y las grabaciones de video desde mi aplicación en una carpeta separada en directorios temporales por un tiempo. Y a medida que la tarea se complete, se guardarán en la base de datos.¿Cómo guardar imágenes y archivos grabados en el directorio temporal?

¿Cómo guardo las imágenes tomadas desde la cámara & grabando videos en una carpeta separada en los directorios temporales?

Respuesta

23

Usted está buscando esto para conseguir que tot almacena en caché carpeta para almacenar los archivos temporales:

NSString* path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 
                 NSUserDomainMask, 
                 YES) lastObject]; 

Desde allí se puede utilizar NSFileManager para crear y eliminar los directorios que desee. Y almacene archivos como cualquier otra parte de un sistema de archivos. Solo tenga en cuenta que el sistema purgará el directorio de caches de vez en cuando.

Así que no se basan en el archivo restante, ni desaparecer, entre puestas en marcha de su aplicación.

+0

El compilador me da un error similar al .., "_NSSearchPathForDirectoriesInDomain", al que se hace referencia. ¿Se está perdiendo algún marco de referencia para incluir? –

+0

@iApple - Lo siento, me perdí un 's' es el nombre de la función. Actualizado la respuesta. – PeyloW

+2

La respuesta aceptada, aunque resolviendo correctamente el problema de la pregunta original. No proporcionó un verdadero directorio temporal. +1 para la respuesta correcta –

1

Usted puede crear su propia carpeta Temp ...

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *tempFolderPath = [documentsDirectory stringByAppendingPathComponent:@"Temp"]; 

[[NSFileManager defaultManager] createDirectoryAtPath:tempFolderPath withIntermediateDirectories:YES attributes:nil error:NULL]; 
+1

Mejor respuesta a continuación, si está tratando de evitar el directorio de documentos. –

8

probar esto:

NSString *tmpDirectory = NSTemporaryDirectory(); 
NSString *tmpFile = [tmpDirectory stringByAppendingPathComponent:@"temp.txt"]; 
NSLog(@"Temp File:%@", tmpFile); 
+0

¿Cómo validar si este tmpFile existe? – jose920405

2

Si desea eliminar todos los archivos del directorio temporal a continuación, utilizar esto.

//cleanup temp files 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *paths = NSTemporaryDirectory(); 

    NSArray *contents = [fileManager contentsOfDirectoryAtPath:paths error:NULL]; 
    NSEnumerator *e = [contents objectEnumerator]; 
    NSString *filename; 

    //NSLog(@"paths: %@ ... contents: %@ ...",paths, contents); 

    while ((filename = [e nextObject])) 
    { 

     [fileManager removeItemAtPath:[paths stringByAppendingPathComponent:filename] error:NULL]; 
    } 
2

Para guardar la imagen en el directorio Temp

-(void)savePhotoToAlbum:(UIImage*)imageToSave withName:(NSString*)imageName { 
    NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES]; 
    NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:imageName] URLByAppendingPathExtension:@"png"]; 
    NSLog(@"fileURL: %@", [fileURL path]); 
    NSData *pngData = UIImagePNGRepresentation(imageToSave); 

    [pngData writeToFile:[fileURL path] atomically:YES]; //Write the file 
} 

para obtener y visualizar imágenes de directorio Temp

NSString *tmpDirectory = NSTemporaryDirectory(); 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:tmpDirectory error:&error]; 
for (NSString *file in cacheFiles) 
{ 
    NSLog(@"%@",file); 
    error = nil; 
    if ([file.pathExtension isEqual:@"png"]){ 
     NSString *filePath = [tmpDirectory stringByAppendingPathComponent:file]; 
     UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]; 
    } 
} 
0

Para guardar fotos y vídeo en directorio diferente que necesita para cambie allí la ruta del directorio y guarde allí la ruta a su base de datos. verifique el código a continuación para crear una carpeta en el directorio de documentos y guarde el archivo con un nombre único.

NSError *error; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 

NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@“/images”]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
{ 

    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; 

} 

NSString *destinationPath = [dataPath stringByAppendingFormat:@"/output_%@.jpg", [dateFormatter stringFromDate:[NSDate date]]]; 
Cuestiones relacionadas