Ошибка при копировании файлов с помощью FileManager (CFURLCopyResourcePropertyForKey не удалось, так как ему был передан URL-адрес без схемы)

Я пытаюсь скопировать некоторые (медиа) файлы из одной папки в другую, используя FileManager copyItem(at:path:), но получаю сообщение об ошибке:

CFURLCopyResourcePropertyForKey не удалось, так как ему был передан URL-адрес, не имеющий схемы Error Domain=NSCocoaErrorDomain Code=262 «Не удалось открыть файл, поскольку указанный тип URL-адреса не поддерживается».

Я использую бета-версию Xcode 9 и 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)

person ruhm    schedule 16.07.2017    source источник


Ответы (1)


Ошибка возникает из-за

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))
person Martin R    schedule 16.07.2017