macOS 获取文件夹大小
获取文件夹大小的扩展如下:
swift
extension URL {
var fileSize: Int? { // in bytes
do {
let val = try self.resourceValues(forKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey])
return val.totalFileAllocatedSize ?? val.fileAllocatedSize
} catch {
print(error)
return nil
}
}
}
extension FileManager {
func folderSize(_ dir: URL) -> Int? {
if let enumerator = self.enumerator(at: dir, includingPropertiesForKeys: [.totalFileAllocatedSizeKey, .fileAllocatedSizeKey], options: [], errorHandler: { (_, error) -> Bool in
print(error)
return false
}) {
var bytes = 0
for case let url as URL in enumerator {
bytes += url.fileSize ?? 0
}
return bytes
} else {
return nil
}
}
}
但是返回来的是字节数,如果要转换成 MB 或者 GB,需要自己做转换,那再来扩展吧。
swift
extension FileManager {
func convertBytesToReadableUnit(_ bytes: Int64) -> String {
let formatter = ByteCountFormatter()
formatter.countStyle = .binary
formatter.allowedUnits = [.useAll]
formatter.includesUnit = true
formatter.isAdaptive = true
return formatter.string(fromByteCount: bytes)
}
}
let bytes: Int64 = 123456789
let readableUnit = FileManager.default.convertBytesToReadableUnit(bytes)
print(readableUnit) // Output: "117.7 MB"