【问题标题】:Getting file size with NSFileManager使用 NSFileManager 获取文件大小
【发布时间】:2026-01-03 10:45:02
【问题描述】:

我需要使用 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];

【问题讨论】:

    标签: ios swift nsfilemanager


    【解决方案1】:

    试试这个代码:

    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
    

    【讨论】:

    • 顺便说一句,对于 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 {}
    【解决方案2】:

    对于 SWIFT 2 试试:

    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
    }
    

    【讨论】:

      【解决方案3】:

      对于 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 属性。