반응형
하다보면 앱 내에 캐시이미지 용량같은 것을 표시해야 할 경우가 있다.
일단, 폴더 용량과 파일용량을 계산하는 방법이 다르다.
1. 캐시이미지 용량
func getCacheCapacityAsMB() -> String {
/* 캐시 이미지의 용량을 측정합니다. */
/* 해당 이미지 폴더 url 입력 */
let cacheUrl = getDocumentsDirectory().appendingPathComponent("cache")
let cacheUrlString = cacheUrl.path
var folderSize = 0
let filemgrList = FileManager.default
if filemgrList.fileExists(atPath: cacheUrlString) {
do {
let attribute = try FileManager.default.attributesOfItem(atPath: cacheUrlString)
folderSize += attribute[FileAttributeKey.size] as! Int
let filelist = try filemgrList.contentsOfDirectory(atPath: cacheUrlString)
filelist.forEach { file in
let tmp = cacheUrlString.appending("/\(file)")
do {
let attribute = try FileManager.default.attributesOfItem(atPath: tmp)
folderSize += attribute[FileAttributeKey.size] as! Int
} catch let error as NSError {
print("\(#function) error: \(error)")
}
}
} catch let error as NSError {
print("\(#function) error: \(error)")
}
}
let byteCountFormatter = ByteCountFormatter()
byteCountFormatter.allowedUnits = .useMB
byteCountFormatter.countStyle = .file
let folderSizeToDisplay = byteCountFormatter.string(fromByteCount: Int64(folderSize))
return folderSize == 0 ? "0 MB" : folderSizeToDisplay
}
2. 폴더 크기를 측정
제외하는 파일 없이 모든 파일의 용량을 측정하고자 할때는 파일단위로 계산하면 forEach 문을 쓴다던가,, 이런 반복문을 쓰는것이 비효율적이라고 생각한다..
func getCapacityAsMB() -> String {
let contentsUrl = getDocumentsDirectory().appendingPathComponent("contents")
var folderSize = 0
if FileManager.default.fileExists(atPath: contentsUrl.path) {
do {
FileManager.default.enumerator(at: oidUrl, includingPropertiesForKeys: [.fileSizeKey], options: [])?.forEach {
folderSize += (try? ($0 as? URL)?.resourceValues(forKeys: [.fileSizeKey]))??.fileSize ?? 0
}
}
}
let byteCountFormatter = ByteCountFormatter()
byteCountFormatter.allowedUnits = .useMB
byteCountFormatter.countStyle = .file
let folderSizeToDisplay = byteCountFormatter.string(fromByteCount: Int64(folderSize))
return folderSize == 0 ? "0 MB" : folderSizeToDisplay
}
반응형
'개발 > swift' 카테고리의 다른 글
Swift Standard Library (!) (0) | 2017.09.27 |
---|---|
[iOS/Swift] 스플래시 이미지 길게 보여주기 (LunchScreen Display Long) (0) | 2017.06.09 |
[iOS/Swift] 페이스북 아이디로 로그인 하기 (1) | 2017.05.17 |
[iOS/Swift] 네이버 아이디로 로그인 하기 (4) | 2017.05.16 |
UILabel 안에 아이콘 넣기 (0) | 2016.11.18 |
댓글