【问题标题】:Swift FileManager - no such fileSwift FileManager - 没有这样的文件
【发布时间】:2018-08-15 11:15:13
【问题描述】:

我正在尝试上传视频。我对 fileExists 是真的,但在我看到的日志中 -

正文文件无法访问: /private/var/mobile/Containers/Data/Application/BE71B534-5051-4552-8491-30E1FE34E128/Documents/upload/306A4291-5E5A-467E-B2F7-8FFCA5BFFC1D1520419887-676644831.mp4

错误域=NSCocoaErrorDomain 代码=260 "该文件 “306A4291-5E5A-467E-B2F7-8FFCA5BFFC1D1520419887-676644831.mp4” 无法打开,因为没有这样的文件。”

let dir = "/upload/"
    let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let path = documentsUrl.appendingPathComponent(dir)

    do {

        if let urlArray = try? FileManager.default.contentsOfDirectory(at: path,
                                                                       includingPropertiesForKeys: [.contentModificationDateKey],
                                                                       options:.skipsHiddenFiles)  {

            let mp4Files = urlArray.filter{ $0.pathExtension == "mp4" }

            for videoFile in urlArray {

                let fileExists = FileManager().fileExists(atPath: videoFile.path)

                if fileExists {


                    let url = URL.init(fileURLWithPath: videoFile.path)

                    self.uploadVideo(url: url)
                }


            }
        }

    } catch {
        print(error.localizedDescription)
    }

保存我使用的视频 -

        let urlData = NSData(contentsOf: videoUrl)

        if((urlData) != nil) {

            DispatchQueue.main.async(execute: { () -> Void in

                urlData?.write(toFile: path, atomically: true)

            })
        }

【问题讨论】:

    标签: swift url swift3 nsfilemanager


    【解决方案1】:

    试试这个,

    使用此代码创建目录

    var nextItemDirUrl : URL!
    
    func createDownloadSongDirIfNotForNextItem() {
            let documentsDirectoryURL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            let logsPath = documentsDirectoryURL.appendingPathComponent("upload")
            nextItemDirUrl = logsPath
    
            do {
                try FileManager.default.createDirectory(atPath: logsPath.path, withIntermediateDirectories: true, attributes: nil)
                print("Directory created at:",logsPath)
            } catch let error as NSError {
                NSLog("Unable to create directory \(error.debugDescription)")
            }
        }
    

    DocumentDirectory 中使用nextItemDirUrl 保存文件后

    let destinationUrl = nextItemDirUrl.appendingPathComponent("yourView.mp4")
    yourVideoData.write(to: destinationUrl, atomically: true)
    

    【讨论】:

    • 什么是dirUrl?
    • @Ros 我的错是nextItemDirUrl
    • 同样的问题.. :/
    • @Ros 将文件存储在路径后,您检查过该文件实际存储与否?
    【解决方案2】:

    我设法解决了这个问题 -

    let urlData = NSData(contentsOf: videoFile)
    
        if((urlData) != nil) {
    
           let lastPath = "/videos/" + "temp.mp4"
    
           let path = documentDirectory.appending(lastPath)
    
           urlData?.write(toFile: path, atomically: true)
           let fileURL = URL.init(fileURLWithPath: path)
           self.uploadVideo(url: url)
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2017-10-01
      • 2016-07-21
      • 2017-04-21
      • 2016-06-10
      相关资源
      最近更新 更多