Swift3.0-获取文件大小

为了方便在项目中使用,把计算文件或文件夹大小的方法做成了String类型的扩展,使用时只需要 通过String类型的对象调用即可:

let filePath = "..."
let fileSize = filePath.getFileSize()

计算文件大小使用Cocoa的FileManager,从OC的NSFileManager到Swift的FileManager ,有几个地方需要注意

  1. fileExists(atPath: String, isDirectory: UnsafeMutablePointer?)方法的使用:
    示例代码:
let fileManager = FileManager.default
var isDir: ObjCBool = false
let isExists = fileManager.fileExists(atPath: self, isDirectory: &isDir)
  1. 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扩展:

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
    }
}

使用时通过对象的成员方法调用:

let file = "/Users/xiaoka/Desktop/视频6"
let size: UInt64 = file.getFileSize()  // 注意返回值为UInt64类型,单位字节

你可能感兴趣的:(Swift3.0-获取文件大小)