ios - 在 Swift 中获取文件大小

标签 ios swift

我尝试了几种获取文件大小的方法,但总是得到零。

let path = NSBundle.mainBundle().pathForResource("movie", ofType: "mov")
let attr = NSFileManager.defaultManager().attributesOfFileSystemForPath(path!, error: nil)
if let attr = attr {
    let size: AnyObject? = attr[NSFileSize]
    println("File size = \(size)")
}

我进入日志:File size = nil

最佳答案

使用 attributesOfItemAtPath 而不是 attributesOfFileSystemForPath + 在你的 attr 上调用 .fileSize()。

var filePath: NSString = "your path here"
var fileSize : UInt64
var attr:NSDictionary? = NSFileManager.defaultManager().attributesOfItemAtPath(filePath, error: nil)
if let _attr = attr {
    fileSize = _attr.fileSize();
}

在 Swift 2.0 中,我们使用 do try catch 模式,如下所示:

let filePath = "your path here"
var fileSize : UInt64 = 0

do {
    let attr : NSDictionary? = try NSFileManager.defaultManager().attributesOfItemAtPath(filePath)

    if let _attr = attr {
        fileSize = _attr.fileSize();
    }
} catch {
    print("Error: \(error)")
}

在 Swift 3.x/4.0 中:

let filePath = "your path here"
var fileSize : UInt64

do {
    //return [FileAttributeKey : Any]
    let attr = try FileManager.default.attributesOfItem(atPath: filePath)
    fileSize = attr[FileAttributeKey.size] as! UInt64

    //if you convert to NSDictionary, you can get file size old way as well.
    let dict = attr as NSDictionary
    fileSize = dict.fileSize()
} catch {
    print("Error: \(error)")
}

关于ios - 在 Swift 中获取文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268145/

相关文章:

ios - 覆盖 drawRect 不渲染

ios - Swift Firebase 在应用程序终止时删除用户

ios - ENsideMenuNavController - 禁用与所有其他 View 的交互

ios - 如何在不检查应用程序状态的情况下确定是否点击了 UILocalNotification?

ios - 为什么即使应用程序状态为 UIApplicationStateBackground,backgroundTimeRemaining 也会给出 DBL_MAX?

ios - 半透明导航栏覆盖推送 View Controller ?

ios - 同时在多个 SceneKit 节点上执行 CAAnimation

swift - 在初始化所有存储的属性之前,在方法调用 'self' 中使用 'f'

ios - 水平堆栈 View 内的标签宽度相等?

ios - 滑动本地通知以加载 ui 警报 View