ios - 如何使用 stat 实用程序而不是 subpathsOfDirectoryAtPath 来计算目录大小

标签 ios macos swift cocoa stat

我一直在使用 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/

相关文章:

android - 用于 iOS 和 Android 开发的 Corona vs Titanium

ios - 在 Youtube api 中创建播放列表

swift - UserDefaults() 和 UserDefaults.standard 之间的区别

ios - 查看动画有时会在零时间内执行

iphone - 使用 PayPal 的 iPhone/iPad 应用程序列表

ios - 没有 moreViewController 的 UITabBarController 的最大选项卡数

python - 为什么 SafariDriver 不能点击特定元素,而 Chrome、FF、Edge 可以?

macos - 当光标位于 NSButton 上时如何更改 NSButton 的标题

ios - UIAlertController + UIProgressView + macCatalyst

swift - 如何快速获取枚举的所有值