ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ios - Swift] FileManager 사용한 저장, 불러오기
    ios 2021. 1. 5. 18:09

     

     

     

    이번 글에서는 FileManager를 사용해서 앱 내 저장 공간에 데이터를 저장 및 불러오기를 처리하도록 하겠습니다.

     

    파일을 저장 또는 불러오려면 파일의 위치를 알아야 하는데 파일의 위치는 URL로 표현할 수 있습니다.

     

     

    우선 파일의 경로를 앱/videos/MyFileSaveName.mp4라고 생각한다면 아래와 같이 사용할 수 있습니다.

    guard let docsUrl = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first else { return }
    let dirUrl = docsUrl.appendingPathComponent("videos")
    let saveUrl = dirUrl.appendingPathComponent("MyFileSaveName.mp4")

     

    - urls(for:,in:)

     

    for : 접근할 디렉토리에 대한 것이며 더 많은 자료는 이곳에서 확인할 수 있습니다.

    • userDirectory

    • downloadDirectory

    • documentDirectory

    in : 디렉토리에 대한 기본 위치를 지정한다고 하는데 접근 옵션으로 생각됩니다. 추후 자세히 알아본 후 업데이트하도록 하겠습니다.

    • userDomainMask // 사용자의 홈 디렉토리이며 개인 항목을 설치할 위치

    • localDomainMask // 모든 사용자가 사용할 수 있는 항목을 설치할 장소

    • networkDomainMask // 네트워크에서 사용 가능한 설치 위치

    • systemDomainMask // 시스템 파일용 디렉토리

    • allDomainMask // 모든 디렉토리

     

     

     

    - 파일 쓰기

     

    파일 주소를 정했으니 이제 파일을 써야 하는데 파일을 쓰기 전 파일을 저장할 폴더를 생성해야 합니다.

       try? FileManager().createDirectory(at: dirUrl, withIntermediateDirectories: true, attributes: nil)

     

    - createDirectory

    at : 디렉토리의 경로입니다.

    withIntermediateDirectories : true 일 경우 중간 경로가 없더라도 알아서 만들고 false일 경우 메소드가 실패합니다.

    attributes : 생성된 디렉토리에 대한 파일 속성이며 파일 권한 및 수정 날짜 등을 설정 가능합니다. nil을 사용 시 기본값으로 설정되는 것으로 알고 있습니다.

     

     

    이제 저장하려는 파일을 Data형식으로 변환 후 아래 함수와 같이 사용하면 됩니다.

     

    func WriteFile(pData: Data, pUrl: URL) {
        if let result = try? pData.write(to: pUrl, options: Data.WritingOptions.atomic) {
            print("쓰기 성공")
        } else {
            print("쓰기 실패")
        }
    }

     

    - write

    to : 데이터를 쓸 위치

    options : 쓰기 옵션입니다. 자세한 내용은 이곳을 참조해 주세요

    • atomic // 보조 파일에 데이터를 쓴 다음 파일을 교환

    • withoutOverwriting // 덮어쓰기 방지

     

     

    - 파일 읽기

     

    파일을 읽는 방법은 사용할 객체마다 다를 것이기 때문에 본인이 사용할 객체에 불러오는 방법을 찾으셔야 합니다. 

     

    Url 만으로 불러오는 방법도 있고 Data를 필요로 하는 것도 있어 데이터를 불러오는 방법만 적도록 하겠습니다.

     

    let data = try? Data.init(contentsOf: saveUrl)
    
    if data != nil {
        print("데이타 존재")
    }
    

     

     

    아이폰 파일 앱에서 내가 저장한 파일을 확인해 보고싶다면 info.plist 에서 아래와 같이 설정하면 됩니다.

     

    Supports opening documents in place -> Yes

    Application supports iTunes file sharing -> Yes

    댓글

Designed by Tistory.