투케이2K

202. (swift5/xcode) [유틸 파일] fileCopy : 앱 파일 저장소에 저장된 파일 복사 - FileManager.default.copyItem 본문

Swift

202. (swift5/xcode) [유틸 파일] fileCopy : 앱 파일 저장소에 저장된 파일 복사 - FileManager.default.copyItem

투케이2K 2023. 12. 14. 19:40

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 
    // -----------------------------------------------------------------------------------------
    // MARK: - [앱 파일 저장소에 저장된 파일 복사]
    // -----------------------------------------------------------------------------------------
    func fileCopy(originFolderName: String, originFileName: String, copyFolderName: String, copyFileName: String) -> Bool {
        
        /*
        // -----------------------------------------
        [fileCopy 메소드 설명]
        // -----------------------------------------
        1. 앱 파일 저장소에 저장된 파일 복사
        // -----------------------------------------
        2. 호출 방법 :
         
         C_App().fileCopy(originFolderName: S_FinalData.HC_APP_LOG_FOLDER_NAME, originFileName: S_FinalData.HC_APP_USE_FILE_NAME, copyFolderName: S_FinalData.HC_APP_LOG_FOLDER_NAME, copyFileName: "copy.txt")
        // -----------------------------------------
        4. 참고 info plist 설정 :
         
         아이폰 파일 접근 설정 : Supports opening documents in place : YES
         아이튠즈 공유 설정 : Application supports iTunes file sharing : YES
        // -----------------------------------------
        */

        
        // [변수 선언]
        var returnData = false
        var M_LOG = ""
        var originFilePaths = ""
        var copyFilePaths = ""


        // [로직 처리 실시]
        let fileManager = FileManager.default // 파일 매니저 선언
        let documentsUrl =  fileManager.urls(for: .documentDirectory, in: .userDomainMask).first // 기본 경로 확인
        
        if documentsUrl != nil 
            && C_Util().stringNotNull(str: originFolderName) == true
            && C_Util().stringNotNull(str: originFileName) == true 
            && C_Util().stringNotNull(str: copyFolderName) == true
            && C_Util().stringNotNull(str: copyFileName) == true {
            
            if C_Util().stringNotNull(str: documentsUrl?.description ?? "") == true {
                
                originFilePaths = documentsUrl?.appendingPathComponent(originFolderName).path ?? ""
                
                if (originFilePaths.hasSuffix("/") == true){
                    originFilePaths = originFilePaths + originFileName
                }
                else {
                    originFilePaths = originFilePaths + "/" + originFileName
                }
                
                if FileManager.default.fileExists(atPath: originFilePaths) == true { // [저장 된 경로 있음]
                    
                    copyFilePaths = documentsUrl?.appendingPathComponent(copyFolderName).path ?? ""
                    
                    // [복사 저장소 확인]
                    if FileManager.default.fileExists(atPath: copyFilePaths) == false { // [저장 된 경로 없음 >> 폴더 생성 실시]
                        do {
                            
                            // [디렉토리 생성 유무 확인]
                            try FileManager.default.createDirectory(atPath: copyFilePaths, withIntermediateDirectories: true, attributes: nil)
                            
                            if (copyFilePaths.hasSuffix("/") == true){
                                copyFilePaths = copyFilePaths + copyFileName
                            }
                            else {
                                copyFilePaths = copyFilePaths + "/" + copyFileName
                            }
                            
                            M_LOG = "[Copy Folder Create] :: "
                            
                            try FileManager.default.copyItem(at: NSURL.fileURL(withPath: originFilePaths), to: NSURL.fileURL(withPath: copyFilePaths))
                            
                            M_LOG += "[Success] :: Copy File"
                            returnData = true
                            
                        } catch {
                            M_LOG = "[Exception] :: [1] :: \(error.localizedDescription)"
                        }
                    }
                    else { // [폴더 >> 있음]
                        M_LOG = "[Copy Folder Exists] :: "
                        
                        if (copyFilePaths.hasSuffix("/") == true){
                            copyFilePaths = copyFilePaths + copyFileName
                        }
                        else {
                            copyFilePaths = copyFilePaths + "/" + copyFileName
                        }
                        
                        do {
                            try FileManager.default.copyItem(at: NSURL.fileURL(withPath: originFilePaths), to: NSURL.fileURL(withPath: copyFilePaths))
                            
                            M_LOG += "[Success] :: Copy File"
                            returnData = true
                        }
                        catch {
                            M_LOG = "[Exception] :: [2] :: \(error.localizedDescription)"
                        }
                        
                    }
                    
                }
                else { // [저장 된 경로 없음]
                    M_LOG = "[ERROR] :: Origin File Not Exists"
                }
                
            }
            else {
                M_LOG = "[ERROR] :: documentsUrl Is Null"
            }
            
        }
        else {
            M_LOG = "[ERROR] :: Input Data Is Null"
        }

        
        // [로그 출력 실시]
        S_Log._D_(description: "앱 파일 저장소에 저장된 파일 복사", data: [
            "INPUT [originFolderName] :: \(originFolderName)",
            "INPUT [originFileName] :: \(originFileName)",
            "INPUT [copyFolderName] :: \(copyFolderName)",
            "INPUT [copyFileName] :: \(copyFileName)",
            "originFilePaths :: \(originFilePaths)",
            "copyFilePaths :: \(copyFilePaths)",
            "M_LOG :: \(M_LOG)",
            "RETURN :: \(returnData)"
        ])
        
        
        // [리턴 변수 선언]
        return returnData
        
    }
 

[결과 출력]


 

반응형
Comments