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

FileManager

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

FileManager


.h


#import <Foundation/Foundation.h>


@interface FileManager : NSObject


//임시파일 저장 URL

-(NSURL*) tempFileURL;


//삭제할 파일이 있는 URL

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


//복사할 문서가 있는 위치 URL 넣고 그곳으로 복사

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


//카메라롤에 복사

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

@end



.m



#import "FileManager.h"

#import <AssetsLibrary/AssetsLibrary.h>

@implementation FileManager


//현재 파일 위치

- (NSURL *)tempFileURL{

    NSLog(@"FileManager - tempFileURL 메소드 진입");

    

    NSString *path = nil;

    NSFileManager *fm = [NSFileManager defaultManager];

    NSInteger i = 0;

    

    //fileExistsAtPath: 해당 경로에 파일이 존재하는 지 확인

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

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

        i++;

    }

    //임시 파일 저장 경로 반환

    return [NSURL fileURLWithPath:path];

}


//파일삭제

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

    NSLog(@"FileManager - removeFile 메소드 진입");

    

    NSString *filePath = [outputFileURL path];

    NSFileManager *fm = [NSFileManager defaultManager];

    

    //파일이 해당 URL에 존재하는지 확인

    if ([fm fileExistsAtPath:filePath]) {

        NSError *error;

        //파일 삭제

        [fm removeItemAtPath:filePath error:&error];

        

        if (error) {

            NSLog(@"error :파일 삭제중  오류가 발생했습니다. : %@" , [error localizedDescription]);

        }

    }

}


//문서에 기록

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

    NSLog(@"FileManager - copyFileToDocuments 메소드 진입");

    //문서 경로

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

    

    //날짜포멧 설정

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

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

    

    

    //video 폴더 존재 유무 확인 + 없을 경우 생성

    NSString *destinationPath = [documentsDirectory appendPath:@"/video"];

    NSFileManager *fm = [[NSFileManager alloc]init];

    if ([fm isWritableFileAtPath:destinationPath]) {

        NSLog(@"이미 video 폴더는 존재합니다.");

    }else{

        

        //존재하지 않을경우 생성

        NSError *error = nil;

        if ([fm createDirectoryAtPath:destinationPath withIntermediateDirectories:YES attributes:nil error:&error]) {

            NSLog(@"video 폴더 생성 성공");

        }else{

            NSLog(@"video 폴더 생성 실패");

        }

        

    }

    

    //최종 저장 경로

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

    

    

    NSError *error;

    //임시저장폴더 경로에서 최종저장 경로로 파일 옮기기

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

    

    if (error) {

        NSLog(@"error :  파일 저장중 오류가 발생했습니다.: %@", [error localizedDescription]);

    }else{

        NSLog(@"비디오 파일이 성공적으로 저장되었습니다.");

    }

    

}



//카메라 롤에 기록

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

    NSLog(@"FileManager - copyFileToCameraRoll 메소드 진입");

    

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

    if (![libary videoAtPathIsCompatibleWithSavedPhotosAlbum:fileURL]) {

        NSLog(@"error : 포토앨범에 저장할 수 있는 설정이 아닙니다.");

    }

    

    //카메라 롤에 저장

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

        

        if (error) {

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

        }else if (assetURL == nil ){

            //카메라 앨범 용량이 꽉찾을때

            NSLog(@"포토엘범에 저장할때 오류가 발생했습니다.");

        }else{

            //임시파일 삭제

            NSError *error;

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

            if (error) {

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

            }

        }

    }];

}


@end

반응형

댓글