使用NSFileManager获取文件大小

4

我需要使用NSFileManager获取视频文件的大小。我可以检索到我的文件的URL路径。我找到了一个看起来可以工作的Objective-C代码,但我的项目是用Swift开发的。我该如何使用Swift编写以下代码?

NSURL *videoUrl=(NSURL*)[info objectForKey:UIImagePickerControllerMediaURL];

//Error Container
NSError *attributesError;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[videoUrl path] error:&attributesError];
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];
3个回答

10

尝试这段代码:

let videoUrl = info[UIImagePickerControllerMediaURL] as! NSURL

var attributesError: NSError?
let fileAttributes = NSFileManager.defaultManager().attributesOfItemAtPath(videoURL.path!, error: &attributesError)!
let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber
let fileSize = fileSizeNumber.longlongValue

2
顺便提一下,使用Swift 2.1时,错误处理方式有所不同: do { let fileAttributes = try self.fileManager.attributesOfItemAtPath(logFilePathURL.path!) let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber let fileSize = fileSizeNumber.longLongValue } catch _ as NSError {} - elsurudo

9

For SWIFT 2 try:

let videoUrl = info[UIImagePickerControllerMediaURL] as! NSURL
do{
     let fileAttributes = try NSFileManager.defaultManager().attributesOfItemAtPath(videoURL.path!) 
     let fileSize = fileAttributes[NSFileSize]      
}
catch let err as NSError{
     //error handling
}

1

尝试使用SWIFT 3:

    let fileSize = try! FileManager.default.attributesOfItem(atPath: "/bin/bash")[FileAttributeKey.size] as! Int

甚至更好的是:

let fileSize = (try! FileManager.default.attributesOfItem(atPath: "/bin/bash")[FileAttributeKey.size] as! NSNumber).uint64Value

在我们的应用程序中,我们曾经将NSFileSize属性转换为UInt64。它在我们的开发机器和测试设备上都完美地工作。然而,在我们的构建服务器上却无法正常工作,尽管该服务器运行了完全相同的XCode设置。在那里,我们不得不将该属性转换为NSNumber,然后获取其uint64属性。 - Daniel Saidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接