首页 > 解决方案 > NSCocoaErrorDomain Code=257 文件无法打开,因为您无权查看它:FileManager attributesOfItem 在 iOS13 中返回 nil

问题描述

在 iOS 13 设备中,FileManager 在尝试获取文件大小时返回权限错误。

do {
    let attr = try FileManager.default.attributesOfItem(atPath: my_file_path) //--> Getting nil
    fileSize = attr[FileAttributeKey.size] as! UInt64
} catch {
    print("Error: \(error)")
}

返回错误:

错误 Domain=NSCocoaErrorDomain Code=257 “文件“trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV”无法打开,因为您没有查看权限。” UserInfo={NSFilePath=/private/var/mobile/Containers/Data/PluginKitPlugin/ADB8684E-12B5-451D-A20F-158B899BB3DD/tmp/trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV,NSUnderlyingError=0x280af0510 {错误域=NSPOSIXErrorDomain Code=1 "不允许操作"}}

仅在我更新到 iOS 13 后才观察到该问题。在早期版本中,一切正常。

标签: swiftnsfilemanagerios13xcode11

解决方案


iOS 13 SDK 将照片应用程序视为另一个应用程序,因此当我们关闭图像选择器控制器时,视频 url 将无效。

我在尝试将视频上传到 AWS 之前遇到了问题,我所做的只是创建一个临时文件夹并在关闭 Image-picker 之前复制现有的视频 url 路径。然后它上传,它的工作。

    func createDirectory(videoURL:URL){
            let Directorypath = getDirectoryPath()
            var objcBool:ObjCBool = true
            let isExist =  FileManager.default.fileExists(atPath:Directorypath,isDirectory: &objcBool)
            // If the folder with the given path doesn't exist already, create it
            if isExist == false{
                do{
                    try FileManager.default.createDirectory(atPath: Directorypath, withIntermediateDirectories: true, attributes: nil)
                }catch{

                    print("Something went wrong while creating a new folder")
                }
            }
            let fileManager = FileManager()

            do {
                if fileManager.fileExists(atPath:Directorypath) {
                    try? fileManager.removeItem(at: URL(fileURLWithPath:Directorypath))
                }
                try fileManager.copyItem(at:videoURL.absoluteURL, to: URL(fileURLWithPath:Directorypath))

                 self.imagePicker.dismiss(animated: true, completion:nil)
              }catch let error {
                              print(error.localizedDescription)
              }

   }

推荐阅读