deep-linking-sample/Apps/Wikipedia/WMF Framework/NSFileManager+DirectorySize.swift

37 lines
1.5 KiB
Swift

import Foundation
@objc public extension FileManager {
@objc func sizeOfDirectory(at url: URL) -> Int64 {
var size: Int64 = 0
let prefetchedProperties: [URLResourceKey] = [.isRegularFileKey, .fileAllocatedSizeKey, .totalFileAllocatedSizeKey]
if let enumerator = self.enumerator(at: url, includingPropertiesForKeys: prefetchedProperties) {
for item in enumerator {
guard let itemURL = item as? NSURL else {
continue
}
let resourceValueForKey: (URLResourceKey) -> NSNumber? = { key in
var value: AnyObject? = nil
try? itemURL.getResourceValue(&value, forKey: key)
return value as? NSNumber
}
guard let isRegularFile = resourceValueForKey(URLResourceKey.isRegularFileKey)?.boolValue else {
continue
}
guard isRegularFile else {
continue
}
let fileSize = resourceValueForKey(URLResourceKey.totalFileAllocatedSizeKey) ?? resourceValueForKey(URLResourceKey.fileAllocatedSizeKey)
guard let allocatedSize = fileSize?.int64Value else {
assertionFailure("URLResourceKey.fileAllocatedSizeKey should always return a value")
return size
}
size += allocatedSize
}
}
return size
}
}