我们尝试在文件管理器中保存 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)
}
}
你的代码有点混乱。
就
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)
}
}