본문 바로가기
ios 뽀개기/objective-c

ios filemanager 관련 모듈 - 저장 삭제 이동

by 인생여희 2018. 12. 7.
반응형

ios filemanager 관련 모듈



#import <Foundation/Foundation.h>


@interface IDFileManager : NSObject


- (NSURL *) tempFileURL;

- (void) removeFile:(NSURL *)outputFileURL;

- (void) copyFileToDocuments:(NSURL *)fileURL;

- (void) copyFileToCameraRoll:(NSURL *)fileURL;


@end





#import "IDFileManager.h"

#import <AssetsLibrary/AssetsLibrary.h>


@implementation IDFileManager


//현재 파일 위치

- (NSURL *)tempFileURL

{

    NSString *path = nil;

    NSFileManager *fm = [NSFileManager defaultManager];

    NSInteger i = 0;

    while(path == nil || [fm fileExistsAtPath:path]){

        path = [NSString stringWithFormat:@"%@output%ld.mov", NSTemporaryDirectory(), (long)i];

        i++;

    }

    return [NSURL fileURLWithPath:path];

}


//파일 삭제

- (void) removeFile:(NSURL *)fileURL

{

    NSString *filePath = [fileURL path];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if ([fileManager fileExistsAtPath:filePath]) {

        NSError *error;

        [fileManager removeItemAtPath:filePath error:&error];

        if(error){

            NSLog(@"error removing file: %@", [error localizedDescription]);

        }

    }

}


//다큐먼트에 기록

- (void) copyFileToDocuments:(NSURL *)fileURL

{

    NSLog(@"IDFileManager copyFileToDocuments - 다큐먼트에 기록시작");

    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    

    NSLog(@"IDFileManager documentsDirectory : %@ ", documentsDirectory);

    

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    

    [dateFormatter setDateFormat:@"yyyy-MM-dd_HH-mm-ss"];

    

    NSString *destinationPath = [documentsDirectory stringByAppendingFormat:@"/output_%@.mov", [dateFormatter stringFromDate:[NSDate date]]];

    

    NSLog(@"IDFileManager destinationPath : %@ ", destinationPath);

    

    

    NSError *error;

    

    //넘어온 url 위치에 있는 파일을 -> 새로 지정한 url 위치로 복사해라

    [[NSFileManager defaultManager] copyItemAtURL:fileURL toURL:[NSURL fileURLWithPath:destinationPath] error:&error];

    

    

    if(error){

        NSLog(@"error copying file: %@", [error localizedDescription]);

    }

}


//카메로 롤로 파일 저장

- (void)copyFileToCameraRoll:(NSURL *)fileURL

{

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    if(![library videoAtPathIsCompatibleWithSavedPhotosAlbum:fileURL]){

        NSLog(@"video incompatible with camera roll");

    }

    

    NSLog(@"IDFileManager copyFileToCameraRoll - 사진첩에 기록 시작");

    [library writeVideoAtPathToSavedPhotosAlbum:fileURL completionBlock:^(NSURL *assetURL, NSError *error) {

        

        if(error){

            NSLog(@"Error: Domain = %@, Code = %@", [error domain], [error localizedDescription]);

        } else if(assetURL == nil){

            

            //It's possible for writing to camera roll to fail, without receiving an error message, but assetURL will be nil

            //Happens when disk is (almost) full

            NSLog(@"Error saving to camera roll: no error message, but no url returned");

            

        } else {

            //remove temp file

            NSError *error;

             NSLog(@"IDFileManager copyFileToCameraRoll - 파일 매니져 removeItemAtURL-remove temp file ");

            [[NSFileManager defaultManager] removeItemAtURL:fileURL error:&error];

            

            if(error){

                NSLog(@"error: %@", [error localizedDescription]);

            }

            

        }

    }];


}



@end








반응형

댓글