使用 FileManager 复制文件时出错(CFURLCopyResourcePropertyForKey 失败,因为传递的 URL 没有方案)

2024-01-03

我正在尝试使用以下命令将一些(媒体)文件从一个文件夹复制到另一个文件夹FileManager's copyItem(at:path:),但我收到错误:

CFURLCopyResourcePropertyForKey 失败,因为它传递的 URL 没有方案 错误域 = NSCocoaErrorDomain 代码 = 262 “由于不支持指定的 URL 类型,因此无法打开该文件。”

我正在使用 Xcode 9 beta 和 Swift 4。

let fileManager = FileManager.default
let allowedMediaFiles = ["mp4", "avi"]

func isMediaFile(_ file: URL) -> Bool {
    return allowedMediaFiles.contains(file.pathExtension)
}

func getMediaFiles(from folder: URL) -> [URL] {
    guard let enumerator = fileManager.enumerator(at: folder, includingPropertiesForKeys: []) else { return [] }

    return enumerator.allObjects
        .flatMap {$0 as? URL}
        .filter { $0.lastPathComponent.first != "." && isMediaFile($0)   
    }
}

func move(files: [URL], to location: URL) {
    do {
        for fileURL in files {
            try fileManager.copyItem(at: fileURL, to: location)
        }
    } catch (let error) {
        print(error)
    }
}


let mediaFilesURL = URL(string: "/Users/xxx/Desktop/Media/")!
let moveToFolder = URL(string: "/Users/xxx/Desktop/NewFolder/")!

let mediaFiles = getMediaFiles(from: mediaFilesURL)

move(files: mediaFiles, to: moveToFolder)

发生错误的原因是

URL(string: "/Users/xxx/Desktop/Media/")!

创建一个没有方案的 URL。您可以使用

URL(string: "file:///Users/xxx/Desktop/Media/")!

或者,更简单地说,

URL(fileURLWithPath: "/Users/xxx/Desktop/Media/")

另请注意,在fileManager.copyItem()目的地必须 包括文件名,而不仅仅是目的地 目录:

try fileManager.copyItem(at: fileURL,
                    to: location.appendingPathComponent(fileURL.lastPathComponent))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 FileManager 复制文件时出错(CFURLCopyResourcePropertyForKey 失败,因为传递的 URL 没有方案) 的相关文章

随机推荐