티스토리 뷰

728x90

지난 블로깅에 AVAssetWriter로 비디오를 저장하면서 FileManager에 대해 스쳐 지나가듯 나왔었는데요! 

이번 블로깅은 FileManager에 깊게 한번 파보려고 합니다 :) 

 


Apple Developer 공식문서

 

파일 시스템의 내용에 대한 편리한 인터페이스 및 상호 작용의 주요 수단입니다.

그냥 파일을 관리 하는 Class에요!

 

아이폰을 사용하면서 한번쯤 보셨을 파일 앱에 보통 저장 됩니다.

파일 앱

 

들어가기전에 용어 정리를 하고 갑시다

Folder = Directory

 

진행될 플로우는 아래와 같습니다.

  1. info.plist 권한
  2. 저장할 파일의 경로 설정 (URL), (appendingPathComponent)
  3. Directory(폴더) 생성
  4. 파일경로 설정 및 생성 & 확장자 설정
  5. 파일 삭제

1. Info.plist 권한

 

아래 두 권한을 모두 Yes로 변경해주세요.

  • Supports opening documents in place
  • Application supports iTunes file sharing

둘다 'Yes'로 변경

 


 

2. 저장할 파일의  폴더 경로 설정

 

먼저 FileManager에 접근하기 위해 fileManager 인스턴스를 생성 합니다.

// 인스턴스 생성
let fileManager = FileManager.default

 

fileManager를 통해 URL(경로)를 설정합니다.

let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
// 또는 
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]

 

경로를 지정했으니 해당 경로에 Directory(폴더)이름을 설정해 줍니다.

let directoryURL = documentsURL.appendingPathComponent("peppo_folder")

 


3. Directory(폴더) 생성

// 폴더 추가
        do {
            try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: false)
        } catch let error {
            print("Create file error: \(error.localizedDescription)")
        }

이제 앱을 실행하고 '파일'앱에 들어가보면 아래 처럼 폴더가 생성됩니다. 


4.  파일 경로 설정 및 생성 & 확장자 설정

 

저는 .txt 파일형식으로 peppo 라는 파일을 만들어 볼건데요.

2번에서 폴더 경로를 설정 해준것 처럼 비슷하게 파일 경로를 설정해줍니다.

// 파일 경로 설정 & 확장자 설정
        let fileURL = directoryURL.appendingPathComponent("peppo.txt") // 확장자 이름 필수

그리고 .txt 파일 안에 글을 써 놓겠습니다.

그냥 써지진 않고 인코딩 작업을 아래와 같이 해야 합니다.

let text = "😛"
        
do {
     // 글쓰기 및 인코딩(.utf8)
      try text.write(to: fileURL, atomically: false, encoding: .utf8) 
   } catch let error {
     print("Create file error: \(error.localizedDescription)")
   }

 

다시 앱 실행 후 파일앱에 들어가보면 !

 

 


5.  파일 삭제

파일 삭제는 간단합니다.

removeItem(at:) 메서드를 사용해서 생성했던 파일 경로를 파라미터로 넣어주면 끝!

  do {
        try fileManager.removeItem(at: fileURL)
        print("파일 삭제 완료")
            
      } catch let error {
          print("Failed to delete file: \(error.localizedDescription)")
      }

 


FileManager가 생각보다 많이 사용되는것 같습니다.

한창 취준할때 했던 프로젝트에도 audio저장,삭제 때 한번 접했었고,

회사에서 프로젝트 할때도 AVAssetWriter를 이용해 비디오 저장 할때도 사용을 했네요. 

비디오 저장의 경우는 여기 하이라이트 부분에서 확인 하시면 됩니다 !!

 

돌아서면 까먹었었는데 이번기회에 블로깅도 할 수 있어서 좋았던것 같습니다 :) 

 


전체 코드(Github)

 

 

 

 

728x90

'iOS' 카테고리의 다른 글

[iOS]긴급심사 요청  (0) 2023.05.07
[Swift] required init, super init  (0) 2023.04.20
[iOS] AVAssetWriter로 비디오 저장  (2) 2023.03.26
RxSwift - Reactive Extensions (.rx)  (0) 2023.03.11
[Combine] Chapter16 : Error Handling  (0) 2023.03.01