Как сохранить изображения и записанные файлы во временном каталоге? - PullRequest
6 голосов
/ 30 июля 2011

Я хочу на некоторое время сохранить снимки, сделанные с камеры, и видеозаписи из моего приложения в отдельной папке во временных каталогах.И по мере выполнения задачи они будут сохраняться в базе данных.

Как сохранить снимки, сделанные с камеры и файлы видеозаписи, в отдельной папке во временных каталогах?

Ответы [ 6 ]

24 голосов
/ 30 июля 2011

Вы ищете это, чтобы получить папку кэширования для хранения временных файлов:

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

Оттуда вы можете использовать NSFileManager для создания и удаления каталогов, которые вы хотите. И храните файлы так же, как и в любой другой части файловой системы. Просто помните, что система будет время от времени очищать каталог кэшей.

Поэтому никогда не полагайтесь на то, что файл остается или исчезает между перезапусками вашего приложения.

8 голосов
/ 30 апреля 2013

попробуйте это:

NSString *tmpDirectory = NSTemporaryDirectory();
NSString *tmpFile = [tmpDirectory stringByAppendingPathComponent:@"temp.txt"];
NSLog(@"Temp File:%@", tmpFile);
2 голосов
/ 08 сентября 2016

Для сохранения изображения во временном каталоге

-(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
}

Получение и отображение изображений из каталога 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];
    }
}
2 голосов
/ 08 июня 2014

Если вы хотите удалить все файлы из временного каталога, используйте это.

//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];
    }
1 голос
/ 30 июля 2011

Вы можете создать свою собственную папку 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];
0 голосов
/ 08 сентября 2016

Чтобы сохранить фото и видео в другом каталоге, вам нужно изменить там путь к каталогу и сохранить там путь к вашей базе данных. проверьте код ниже, чтобы создать папку в каталоге документов и сохранить файл с уникальным именем.

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]]];
...