티스토리 뷰
지난 블로깅에 AVAssetWriter로 비디오를 저장하면서 FileManager에 대해 스쳐 지나가듯 나왔었는데요!
이번 블로깅은 FileManager에 깊게 한번 파보려고 합니다 :)
파일 시스템의 내용에 대한 편리한 인터페이스 및 상호 작용의 주요 수단입니다.
그냥 파일을 관리 하는 Class에요!
아이폰을 사용하면서 한번쯤 보셨을 파일 앱에 보통 저장 됩니다.
들어가기전에 용어 정리를 하고 갑시다
Folder = Directory
진행될 플로우는 아래와 같습니다.
- info.plist 권한
- 저장할 파일의 경로 설정 (URL), (appendingPathComponent)
- Directory(폴더) 생성
- 파일경로 설정 및 생성 & 확장자 설정
- 파일 삭제
1. Info.plist 권한
아래 두 권한을 모두 Yes로 변경해주세요.
- Supports opening documents in place
- Application supports iTunes file sharing
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)
'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 |
- Total
- Today
- Yesterday
- Swift Leetcode
- swift 고차함수
- Swift inout
- ios
- Swift
- iOS error
- Swift 내림차순
- CS 네트워크
- Swift 프로그래머스
- removeLast()
- Swift joined
- Swift joined()
- Combine: Asynchronous Programming with Swift
- Swift init
- 원티드 프리온보딩
- swift property
- 2023년 회고
- Swift ModernRIBs
- Swift final
- Swift RIBs
- swift protocol
- Swift 알고리즘
- swift programmers
- RIBs tutorial
- swift (programmers)
- RTCCameraVideoCapturer
- Swift Error Handling
- Class
- Swift 프로퍼티
- swift reduce
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |