NSFileManager?
- NSFileManager 클래스는 생성, 이동, 파일 읽고 쓰기, 파일 속성 읽기 및 설정 등
기본적인 파일, 디렉터리 작업을 수행
- 현재 작업 디렉터리 확인, 새로운 디렉터리로 변경, 디렉터리 생성 및 디렉터리의 내용 확인
등의 메서드 지원
<디렉터리에 관련된 몇가지 주요 메서드 및 속성입니다. 직접 출력 하여 확인하면 도움이 됩니다>
//default NSFileManager 객체에 대한 참조체 얻기
let filemgr = NSFileManager.defaultManager()
*객체 참조체를 얻으면 파일과 디렉터리에 대한 작업 수행 가능
*객체 참조체를 얻으면 파일과 디렉터리에 대한 작업 수행 가능
//현재 작업 디렉터리 확인
let currentFilepath = filemgr.currentDirectoryPath
//Documents 디렉터리 확인
let dirpaths =
NSSearchPathForDirectoriesInDomains(.DocumentationDirectory, .UserDomainMask, true)
let dirpaths =
NSSearchPathForDirectoriesInDomains(.DocumentationDirectory, .UserDomainMask, true)
let docsDir = dirpaths[0] as String
* 위 코드를 실행하면 Documents 디렉터리 경로는 docsDir에 할당
* 위 코드를 실행하면 Documents 디렉터리 경로는 docsDir에 할당
//임시 디렉터리 확인
let tmpDir = NSTemporaryDirectory()
이제 NSFileManager를 이용하여 임의이미지를 디렉터리에 저장하고 로드 하는 작업을 시작하겠습니다.
1. 스토리보드에 이미지가 들어갈 imageView 와 함수를 실행할 버튼 추가
1) imageView 아울렛 추가
< @IBOutlet weak var MyImageSet: UIImageView!>
2) UIbutton 의 Action 추가
@IBAction func imagesaveButton(sender: AnyObject) {
//이미지 저장 함수 실행saveImage ( newImage!, path: imagePath )
}
@IBAction func imageloadButton(sender: AnyObject) {
//이미지 로드 함수 실행MyImageSet.image = loadImageFromPath(fileInDocumentsDirectory("saveImage"))
}
2.이미지 파일 path 설정 및 저장
임의 이미지를 사용합니다.(이미지 이름 -> image.png)
imagePickerController 를 사용하여 카메라나 앨범의 이미지를 불러와 사용하세요
// 임의 이미지 객체 생성
let newImage = UIImage(named: "image.png")
// 저장될 파일 이름
imagePickerController 를 사용하여 카메라나 앨범의 이미지를 불러와 사용하세요
// 임의 이미지 객체 생성
let newImage = UIImage(named: "image.png")
// 저장될 파일 이름
let filename = "saveImage"
// 저장될 파일 path 지정 (fileInDocumentsDirectory 함수 리턴 값)
// 저장될 파일 path 지정 (fileInDocumentsDirectory 함수 리턴 값)
let imagePath = fileInDocumentsDirectory(filename)
3. 함수 생성
//파일 Documents URL 로드 함수
func getDocumentsURL() -> NSURL {
/*
.stringByAppendingPathComponent 대신 .URLsForDirectory 사용
현재 어플리케이션의 Documents 디렉터리를 확인 할수 있다
*/ .stringByAppendingPathComponent 대신 .URLsForDirectory 사용
현재 어플리케이션의 Documents 디렉터리를 확인 할수 있다
letdocumentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
return documentsURL
}
// 디렉터리에 지정했던 이름으로 파일 생성 함수
func fileInDocumentsDirectory(filename: String) -> String {
let fileURL = getDocumentsURL().URLByAppendingPathComponent(filename)
return fileURL.path!
}
func saveImage (image: UIImage, path: String ) -> Bool{
// 파일 저장 타입 선택 (png, jpeg)
let pngImageData = UIImagePNGRepresentation(image)
// 파일 저장 타입 선택 (png, jpeg)
let pngImageData = UIImagePNGRepresentation(image)
//let jpgImageData = UIImageJPEGRepresentation(image, 1.0)
let result = pngImageData!.writeToFile(path, atomically: true)
return result
}
//이미지 로드 함수
func loadImageFromPath(path: String) -> UIImage? {
let image = UIImage(contentsOfFile: path)
if image == nil {
print("missing image at: \(path)")
}
print("Loading image from path: \(path)")
return image
}
빌드 후 이미지 저장 버튼을 누른 후 로드 버튼을 누르면 이미지가 로드 되는 것을 확인 할 수 있습니다.
디버깅 창엔 아래 처럼 파일 경로가 나타납니다.
missing image at: /Users/<user name>/Library/Developer/CoreSimulator/Devices/<Device ID>/data/Containers/Data/Application/<app ID>/Documents/saveImage
Loading image from path: /Users/<user name>/Library/Developer/CoreSimulator/Devices/<Device ID>/data/Containers/Data/Application/<app ID>/Documents/saveImage