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

일정시간이 지난 파일 자동 삭제하기

by 인생여희 2019. 1. 9.
반응형



일정시간이 지난 파일 자동 삭제하기



앱실행할때 호출

//일정 시간 지난 미디어 파일 지우기


   [self deleteOverDateMediaFile];



//삭제 기준 날짜 가져오기

-(float)getDeleteStandardDateSeconds{

    

    //기준이 되는 날짜

    // 1. 3일 전 날짜를 구함 -> 데이터 포멧 변환 -> string으로 변환 -> 초 로변환 (568393200.000000)

    NSDateComponents* deltaComps = [[NSDateComponents alloc] init];

    [deltaComps setDay: -3];

    NSDate* tomorrow = [[NSCalendar currentCalendar] dateByAddingComponents:deltaComps toDate:[NSDate date] options:0];

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

    dateFormatter.dateFormat = @"yyyyMMdd";

    NSString *dateString = [dateFormatter stringFromDate:tomorrow];

    NSLog(@"날짜 스트링 타입 : %@" , dateString);

    NSDate *dateDate = [dateFormatter dateFromString:dateString];

    NSLog(@"날짜 데이트 타입 : %@" , dateDate);

    NSTimeInterval seconds = [dateDate timeIntervalSinceReferenceDate];

    NSLog(@"초로변환 : %f" , seconds);

    return seconds;

}


//일정 시간 지난 미디어 파일 지우기

-(void)deleteOverDateMediaFile{


   //삭제 기준이 되는 초로 변환된 데이터

    float deleteDateStandardSeconds = [self getDeleteStandardDateSeconds];

    [self startDeleteMediaFile:@"/video" deleteStandardSeconds:deleteDateStandardSeconds ];

    [self startDeleteMediaFile:@"/audio" deleteStandardSeconds:deleteDateStandardSeconds ];

    [self startDeleteMediaFile:@"/photo" deleteStandardSeconds:deleteDateStandardSeconds ];

}



//비디오, 오디오, 사진 파일 삭제

-(void) startDeleteMediaFile :(NSString *) fileName  deleteStandardSeconds:(float) second{

    //파일 매니져

    NSFileManager *fm = [NSFileManager defaultManager];

    

    //최종 문서  폴더

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

    

    NSString *bigDir = [DocumentDrectory[0] stringByAppendingFormat:@"%@",fileName];

    

    //디렉토리 존재여부

    if ([fm isWritableFileAtPath:bigDir] ) {

        NSLog(@" %@ Dir가 존재합니다." , bigDir);

    }else{

        NSLog(@" %@ Dir가 존재하지 않습니다." ,bigDir);

    }

    

    //폴더 안에 있는 날짜 폴더들

    NSError *err;

    NSArray *smallDateFileArray = [fm contentsOfDirectoryAtPath:bigDir error:&err];

    if (err == nil) {

        

        //날짜 폴더 개수별로 개수

        for (int i = 0 ; i < (unsigned long)[smallDateFileArray count]; i++) {


            

            NSString *folderPathToDelete = [bigDir stringByAppendingFormat:@"/%@/",[smallDateFileArray objectAtIndex:i] ];

            

            //String 폴더명 가져와서 날짜 타입으로 바꾸고 숫자로 바꿔주기

            NSString *dateFileNameString =   [smallDateFileArray objectAtIndex:i];

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

            [fileDateFormatter setDateFormat:@"yyyyMMdd"];

            NSDate *fileNameDate = [fileDateFormatter dateFromString:dateFileNameString];

            NSTimeInterval haveToDeleteSeconds = [fileNameDate timeIntervalSinceReferenceDate];

            NSLog(@"초로변환2 : %f" , haveToDeleteSeconds);

            

            //삭제기준 날짜와 비교해서 작으면 (앞의 날짜) 경로를 가져와서 삭제 해준다.

            if (second > haveToDeleteSeconds) {

                

                NSError *deleteErr;


               [[NSFileManager defaultManager] removeItemAtPath:folderPathToDelete error:&deleteErr];

               

                if (deleteErr != nil) {

                    NSLog(@"이전 파일 삭제 중 오류가 발생했습니다.");

                    return;

                }else{

                    NSLog(@"삭제 성공!");

                    NSLog(@"%@ 폴더는 3일이 지난 파일이기 때문에 삭제 했습니다." , dateFileNameString);

                    NSLog(@"삭제 경로 : %@ " , folderPathToDelete);

                }

            }

        }

    }

}



반응형

댓글