macOS

[IOS, MacOS] FileManager Library

Daesiker 2021. 3. 5. 15:48
반응형

FileManager란

IOS와 macOS에서 파일을 다룰 수 있게 해주는 클래스로 ios 2.0 이상, macOS 10.0 이상부터 사용 가능하다. 파일 시스템과 상호작용하는 것을 도와주며 디렉토리의 위치 결정, 생성, 복사, 옮기기가 가능하다. 특정 파일이나 디렉토리의 정보를 얻어오는 것도 지원된다.

특정 파일의 위치를 표시할 때 NSString 객체와 NSURL 객체를 사용할 수 있는데, 시스템 내부적으로 URL 객체가 경로 정보를 더 효율적으로 바꾸어 주어서 NSURL 객체를 사용하는 것을 권장하고 있다.

ios 5.0, macOS 10.7 이상부터는 iCloud에 저장된 파일들과 폴더들도 관리할 수 있게 되었는데 iCloud안에 들어있는 파일들을 조작하면 iCloud와 연결된 모든 기기의 파일들이 똑같이 조작된다.

 

FileManager 기능

  • 현재 디렉토리 경로값 확인
  • 디렉토리 변경
  • 디렉토리 생성
  • 디렉토리 삭제
  • 디렉토리의 파일 리스트 얻기
  • 파일 존재여부 확인
  • 파일 옮기기
  • 파일 복사
  • 파일 삭제
  • 파일 읽기
  • 파일 생성
  • 볼륨 마운트 해제
  • 마운트된 파일시스템의 속성을 Dictionary로 반환
  • 마운트된 볼륨 나열

 

 

FileManagerDelegate

FileManager의 동작을 관리하는 FileManagerDelegate에는 필수적인 메서드는 없고 다 optional 메서드를 갖고 있는데 보통 filemanager가 수행하기 전과 후의 동작 처리를 담당하고 있다.

 


사용하기

 

Info.plist 설정

폴더에 접근할 수 있는 권한을 허용 받아야 하므로 'Supports Document Browser' 속성을 추가한 뒤 YES로 설정한다.

 

파일 만들기

ViewControll.swift

import UIKit

class ViewController: UIViewController, FileManagerDelegate {
    let fileManager = FileManager.default
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let fileURL = documentsURL.appendingPathComponent("Daesiker의 파일.txt")
        let textString = NSString(string: "Hello World")
        try? textString.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
    }


}

 

 

→ 해당 화면은 우리가 만든 App 프로젝트가 아니다.

→ 앱을 실행하면 빈 화면과 함께 시뮬레이터 Files에 파일을 생성해준다.

→ 앱을 실행한 뒤 홈화면으로 가고 Files를 클릭하면 볼 수 있다.

 

let fileManager = FileManager.default

→ FileManager의 싱글톤 instance를 생성

 

let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]

🔻 urls Method

특정 디렉토리의 URL의 배열을 얻어올 수 있다.

  • for : 탐색할 디렉토리를 지정한다.
  • in : 파일 시스템의 도메인을 지정한다.

 

→ 배열의 [0]번째 요소를 가져왔으므로 가장 최상단 디렉토리의 URL을 가져온다.

 

let fileURL = documentsURL.appendingPathComponent("Daesiker의 파일.txt")

 

appendingPathComponent : 현재 url의 string 경로 추가하여 새로운 경로, 즉 파일이 생긴다. 스트링 값 안에 원하는 확장자를 넣어야한다.

 

 

try? textString.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)

I/O 작업이기 때문에 try-catch 문으로 에러에 대한 처리를 해주거나 옵셔널로 처리해야 한다.

String Protocol의 write 메서드를 이용해서 fileURL에 텍스트 파일을 만들었다.

 


디렉토리 생성

 

import UIKit

class ViewController: UIViewController, FileManagerDelegate {
    let fileManager = FileManager.default
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let fileURL = documentsURL.appendingPathComponent("Devs")
        if !fileManager.fileExists(atPath: fileURL.path) {
            do {
                try fileManager.createDirectory(atPath: fileURL.path, withIntermediateDirectories: true, attributes: nil)
            } catch {
                NSLog("Error!")
            }
        }
        
    }

}

 

 

fileExists(atPath: String) : String이 올바른 파일경로인지 boolean값으로 알려준다.

 

createDirectory(atPath:

String

, withIntermediateDirectories:

boolean

, attributes:

[FileAttributeKey: Any]

) : atPath에 있는 경로에 디렉토리를 생성한다. 2번째 인자는 true이면 경로에 있는 모든 중간 디렉토리가 생성이되고 false이면 생성이 되지 않는다. attributes는 생성된 디렉토리의 속성을 지정한다. 지정하고 싶지 않으면 null로 설정

 

 

 

반응형