我正在Swift中构建一个简单的程序,它应该将具有特定扩展名的文件复制到另一个文件夹中。如果该文件夹存在,程序将只将它们复制到该文件夹中;如果该文件夹不存在,则程序必须先将其复制。
let newMTSFolder = folderPath.stringByAppendingPathComponent("MTS Files") if (!fileManager.fileExistsAtPath(newMTSFolder)) { fileManager.createDirectoryAtPath(newMTSFolder, withIntermediateDirectories: false, attributes: nil, error: nil) } while let element = enumerator.nextObject() as? String { if element.hasSuffix("MTS") { // checks the extension var fullElementPath = folderPath.stringByAppendingPathComponent(element) println("copy \(fullElementPath) to \(newMTSFolder)") var err: NSError? if NSFileManager.defaultManager().copyItemAtPath(fullElementPath, toPath: newMTSFolder, error: &err) { println("\(fullElementPath) file added to the folder.") } else { println("FAILED to add \(fullElementPath) to the folder.") } } }
运行此代码将正确识别MTS文件,但会导致“添加失败…”,我在做什么错?
从copyItemAtPath(...)文档中:
copyItemAtPath(...)
dstPath 放置的副本的路径srcPath。此路径必须在新位置包含文件或目录的名称。…
dstPath
srcPath
您必须将文件名附加到copyItemAtPath()调用的目标目录中 (为Swift 3及更高版本更新的代码)
copyItemAtPath()
let srcURL = URL(fileURLWithPath: fullElementPath) let destURL = URL(fileURLWithPath: newMTSFolder).appendingPathComponent(srcURL.lastPathComponent) do { try FileManager.default.copyItem(at: srcURL, to: destURL) } catch { print("copy failed:", error.localizedDescription) }