*** 清空缓存
//清除 Library/Caches
func clearCaches(){
do {
try deleteLibraryFolderContents(folder: "Caches")
//print("clear done")
} catch {
//print("clear Caches Error")
}
}
//
private func deleteLibraryFolderContents(folder: String) throws {
let manager = FileManager.default
let library = manager.urls(for: FileManager.SearchPathDirectory.libraryDirectory, in: .userDomainMask)[0]
let dir = library.appendingPathComponent(folder)
let contents = try manager.contentsOfDirectory(atPath: dir.path)
for content in contents {
//如果是快照就继续
if(content == "Snapshots"){continue;}
do {
try manager.removeItem(at: dir.appendingPathComponent(content))
//print("remove cache success:"+content)
} catch where ((error as NSError).userInfo[NSUnderlyingErrorKey] as? NSError)?.code == Int(EPERM) {
//print("remove cache error:"+content)
// "EPERM: operation is not permitted". We ignore this.
#if DEBUG
//print("Couldn't delete some library contents.")
#endif
}
}
}
** 统计缓存大小
var fileSize:Int = 0;
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(false)
UIView.animate(withDuration: 0.3, animations: {() -> Void in
self.v.frame.origin.y = 0;
}){(finished) -> Void in
DispatchQueue.global().async {
self.fileSize = self.fileSizeOfCache();
//获取数据异步
DispatchQueue.main.async {
//修改主线程UI
self.clearLable.text = "已用 "+String(self.fileSize)+" MB";
}
}
}
}
//获取缓存大小
func fileSizeOfCache()-> Int {
// 取出cache文件夹目录 缓存文件都在这个目录下
let cachePath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first
//缓存目录路径
//print(cachePath)
// 取出文件夹下所有文件数组
let fileArr = FileManager.default.subpaths(atPath: cachePath!)
//快速枚举出所有文件名 计算文件大小
var size = 0
for file in fileArr! {
// 把文件名拼接到路径中
let path = cachePath?.appending("/\(file)")
// 取出文件属性
let floder = try! FileManager.default.attributesOfItem(atPath: path!)
// 用元组取出文件大小属性
for (abc, bcd) in floder {
// 累加文件大小
if abc == FileAttributeKey.size {
size += (bcd as AnyObject).integerValue
}
}
}
let mm = size / 1024 / 1024
return mm
}