為了方便在項(xiàng)目中使用推掸,把計(jì)算文件或文件夾大小的方法做成了String
類型的擴(kuò)展挖垛,使用時(shí)只需要 通過String類型的對象調(diào)用即可:
let filePath = "..."
let fileSize = filePath.getFileSize()
計(jì)算文件大小使用Cocoa的FileManager
,從OC的NSFileManager
到Swift的FileManager
荣暮,有幾個(gè)地方需要注意
-
fileExists(atPath: String, isDirectory: UnsafeMutablePointer<ObjCBool>?)
方法的使用:
示例代碼:
let fileManager = FileManager.default
var isDir: ObjCBool = false
let isExists = fileManager.fileExists(atPath: self, isDirectory: &isDir)
-
attributesOfItem(atPath: String)
方法的使用:
示例代碼:
let fileManager = FileManager.default
let filePath = "..."
do {
let attr = try fileManager.attributesOfItem(atPath: filePath)
let size = attr[FileAttributeKey.size] as! UInt64
} catch {
print("error :\(error)")
}
獲取文件大小的String擴(kuò)展:
extension String {
// 對象方法
func getFileSize() -> UInt64 {
var size: UInt64 = 0
let fileManager = FileManager.default
var isDir: ObjCBool = false
let isExists = fileManager.fileExists(atPath: self, isDirectory: &isDir)
// 判斷文件存在
if isExists {
// 是否為文件夾
if isDir.boolValue {
// 迭代器 存放文件夾下的所有文件名
let enumerator = fileManager.enumerator(atPath: self)
for subPath in enumerator! {
// 獲得全路徑
let fullPath = self.appending("/\(subPath)")
do {
let attr = try fileManager.attributesOfItem(atPath: fullPath)
size += attr[FileAttributeKey.size] as! UInt64
} catch {
print("error :\(error)")
}
}
} else { // 單文件
do {
let attr = try fileManager.attributesOfItem(atPath: self)
size += attr[FileAttributeKey.size] as! UInt64
} catch {
print("error :\(error)")
}
}
}
return size
}
}
使用時(shí)通過對象的成員方法調(diào)用:
let file = "/Users/xiaoka/Desktop/視頻6"
let size: UInt64 = file.getFileSize() // 注意返回值為UInt64類型,單位字節(jié)