我一直在使用 subpathsOfDirectoryAtPath::
计算目录大小,但发现它非常缓慢。经过大量研究后,我发现了 stat
结构,可用于更快、更有效地实现预期结果。如何在 swift 中使用 stat
来实现这个目标?
这是我当前使用 subpathsOfDirectoryAtPath::
计算文件大小的算法:
func calcSize(pathToDir: String) -> (Int) {
let fm = NSFileManager.defaultManager()
var size = 0
let fileArray = (fm.subpathsOfDirectoryAtPath(pathToDir, error: nil)) as! [String]
for file in fileArray {
autoreleasepool({
var fileDict: NSDictionary? = fm.attributesOfItemAtPath(pathToDir.stringByAppendingPathComponent(file), error: nil)
size += Int(fileDict!.fileSize())
})
}
return (size)
}
附言。到目前为止,我找到的所有结果在 objective-c 和 C 中都有答案,但在 swift 中没有。
最佳答案
这是 Swift 中的示例用法:
var stat1 : stat = stat()
var documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
stat(documentsPath.fileSystemRepresentation, &stat1)
println(stat1.st_size)
编辑
var stat1 : stat = stat()
var size = 0
let fileArray = (NSFileManager.defaultManager().subpathsOfDirectoryAtPath(pathToDir as String, error: nil)) as! [String]
for file in fileArray {
var stat1 : stat = stat()
var filex = (pathToDir as String) + "/" + file as NSString
stat(filex.fileSystemRepresentation, &stat1)
if stat(filex.fileSystemRepresentation, &stat1) != 0 {
println("Some error occured ")
} else {
println(stat1.st_size)
}
size += Int(Double(stat1.st_size))
}
}
关于ios - 如何使用 stat 实用程序而不是 subpathsOfDirectoryAtPath 来计算目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31083331/