Filemanager 사용해보기
먼저 위치를 확인한다.
아래 코드를 실행하면 콘솔창에 주소가 하나 뜬다.
그걸 터미널에 열어서 open 주소라고 치면
어떤 폴더가 나온다.
이 폴더가 바로 앞으로 작업할 폴더 이다.
override func viewDidLoad() {
...
let manager = FileManager.default
guard let url = manager.urls(
for: .documentDirectory,
in: .userDomainMask).first else { return }
print(url.path)
}
작업을 저장할 폴더 만들기
만들 때 먼저 해야하는 것이
바로 "경로 설정"이다.
여기서는 newFolderUrl 이라는 변수에 url (위에서 만든 변수) 변수로 설정된
경로 그 안에 들어갈 경로를 만든다.
그 다음이 do ~ try - catch 문을 통해 폴더를 생성한다.
let newFolderUrl = url.appendingPathComponent("ios-academy")
// ios-academy 폴더 생성
do {
try manager.createDirectory(
at: newFolderUrl,
withIntermediateDirectories: true,
attributes: [:])
} catch {
print(error)
}
▶️ at: 경로 및 폴더명, 위에서 만든 newFolderUrl 사용
▶️ withIntermediateDirectories: 참인 경우 이 메서드는 url에 디렉토리를 작성할 때 존재하지 않는 모든 상위 디렉토리를 작성합니다. false인 경우 중간 상위 디렉터리가 없는 경우 이 메서드는 실패합니다. (직역이라..)
여기서는 true로 했어요 .. 아직 에러는 안났어요..
▶️ attributes: 새 디렉터리에 대한 file 속성을 지정합니다. 소유자 및 그룹 번호, 파일 권한 및 수정 날짜를 설정할 수 있습니다. 이 매개 변수에 대해 nil을 지정하면 프로세스의 umask(2) macOS Developer Tools Manual Page에 따라 디렉터리가 생성됩니다.
여튼 위에 메서드를 실행하면 이렇게 폴더가 하나 만들어진다.
폴더를 하나 만들었으니까
그 안에 파일을 하나 만들려면?
폴더 생성하는 방법과 동일하나.
그 호출하는 메서드가 다르다.
여기서는 createFile이라는 메서드를 사용했다.
let fileUrl = newFolderUrl.appendingPathComponent("logs.txt")
manager.createFile(
atPath: fileUrl.path,
contents: nil,
attributes: [FileAttributeKey.creationDate:Date()])
위의 메서드를 호출하면 아래와 같이 파일이 하나 생성된다.
생성한 파일 내에 데이터를 넣는다면?
그러니까 만약에 String 타입의 데이터를 넣고 싶다면???
그럴려면 면저 저정하고 싶은 String 타입의 데이터를 선언한다.
그리고 그 데이터를 createFile 메서드를 호출해서 넣어준다.
let data = "writing~~".data(using: .utf8)
manager.createFile(
atPath: fileUrl.path,
contents: data,
attributes: [FileAttributeKey.creationDate:Date()]
)
그러면 아래와 같이 파일내에 위에 써인 "writing ~~" 이 저장된다.
그럼 위에 쓴 데이터를 삭제하고 싶다면?
이것도 마찬가지로 경로를 지정해주고 삭제를 하면 되는데,
먼저 삭제할 경로에 데이터가 있는지 여부를 확인해야한다.
if manager.fileExists(atPath: fileUrl.path(percentEncoded: true)){
// print("파일이 있네 ")
do {
try manager.removeItem(at: fileUrl)
} catch {
print(error)
}
}
근데 만약에 폴더를 삭제하고 싶다면?
이것도 마찬가지로 폴더 경로를 지정만 하면 된다.
if manager.fileExists(atPath: fileUrl.path(percentEncoded: true)){
// print("파일이 있네 ")
do {
try manager.removeItem(at: newFolderUrl)
} catch {
print(error)
}
}
'UIKit > 기본' 카테고리의 다른 글
서치바로 원하는 검색어에 맞춰 공공 API 정보 얻어오기 (0) | 2024.04.20 |
---|---|
공공 API를 어떻게 갖고 오나? (공공 API를 GET 하는 방법) (0) | 2024.04.09 |
네비게이션 바 + 탭 바 적용 (0) | 2024.03.29 |
Drawing Cycle (+ Layout Cycle) (0) | 2024.03.28 |
앱의 생명주기 (App Life Cycle) (0) | 2024.03.27 |