路径必须是绝对路径:<>cannotCreateNode(path: "")

问题描述 投票:0回答:1

我们尝试在文件管理器中保存 usdz 文件,有时它已保存,但有时我们收到错误。 喜欢:

path.absoluteURL 文件:///var/mobile/Containers/Data/Application/6D14A430-47B4-45F2-9D0D-6C31588A6A03/Documents/2896837C-C7E0-4FA8-BFE2-21A59B26D801.usdz 警告:在 sdf/path.cpp 第 151 行的 SdfPath 中 -- 格式错误的 SdfPath :语法错误 编码错误:在 usd/stage.cpp 第 3338 行的 _IsValidPathForCreatingPrim 中 -- 路径必须是绝对路径:<> 无法创建节点(路径:“/2896837CC7E04FA8BFE221A59B26D801”)

func saveFileLocal() {
        if let finalResult {
            let fm = FileManager.default
            var path = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
            let fileName = "\(UUID().uuidString).usdz"
            path.appendPathComponent(fileName)
            do {
                try finalResult.export(to: path.absoluteURL)
            }
            catch{
                print(error)
            }
        }
    }
   
   func removeFiles() {
        var filePath = ""
        let fm = FileManager.default
        let path = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
        do{
            let content = try fm.contentsOfDirectory(atPath: path.path)
            for c in content{
                filePath = path.appendingPathComponent(c).absoluteString
                if let url = URL(string: filePath){
                    try fm.removeItem(at: url)
                }
            }
        }
        catch{
            print(error)
        }
    }
swift nsfilemanager file-manager roomplan
1个回答
0
投票

你的代码有点混乱。

  • URL
    而言,
    path
    是一个文件系统字符串路径,你所有的
    path
    变量实际上都是
    URL
    s。

  • absoluteURL
    在此上下文中不执行任何操作,请将其删除。

  • absoluteString
    绕行毫无意义,
    path.appendingPathComponent(c)
    是你想要的URL,但使用
    contentsOfDirectory(at:includingPropertiesForKeys:)
    你可以免费获得完整的URL。

    func saveFileLocal() {
          if let finalResult {
              let fm = FileManager.default
              let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
              // or let documentsURL = URL.documentsDirectory
              let fileName = "\(UUID().uuidString).usdz"
              let fileURL = documentsURL.appendingPathComponent(fileName)
              do {
                  try finalResult.export(to: fileURL)
              } catch {
                  print(error)
              }
          }
      }
    
     func removeFiles() {
          let fm = FileManager.default
          let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
          // or let documentsURL = URL.documentsDirectory
          do {
              let content = try fm.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
              for anURL in content {
                   try fm.removeItem(at: anURL)
              }
          } catch {
              print(error)
          }
      }
    
© www.soinside.com 2019 - 2024. All rights reserved.