我尝试了几种方法来获取文件大小,但始终为零。
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
File size = nil
使用attributesOfItemAtPath而不是attributesOfFileSystemForPath +调用attr上的.fileSize()。
attributesOfItemAtPath
attributesOfFileSystemForPath
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)") }