我想将OSX中的文件移动到另一个目录:
func moveFile(currentPath currentPath: String, targetPath: String) {
let fileManager = NSFileManager.defaultManager()
do { try fileManager.moveItemAtPath(currentPath, toPath: targetPath) }
catch let error as NSError { print(error.description) }
}
除目标目录不存在的情况外,一切正常。我发现.isWritableFileAtPath
可能会有所帮助。
但是,在我声明的函数中,我使用完整的文件路径(包括文件名)。
如何从路径中分割文件名或更多信息:如果需要,如何在移动文件之前强制Swift创建目录?
答案 0 :(得分:5)
过去我用类似下面代码的代码解决了这个问题。基本上,您只需检查表示您要创建的文件的父目录的路径中是否存在文件。如果它不存在,则在路径中创建它以及它上面的所有文件夹也是不存在的。
func moveFile(currentPath currentPath: String, targetPath: String) {
let fileManager = NSFileManager.defaultManager()
let parentPath = (targetPath as NSString).stringByDeletingLastPathComponent()
var isDirectory: ObjCBool = false
if !fileManager.fileExistsAtPath(parentPath, isDirectory:&isDirectory) {
fileManager.createDirectoryAtPath(parentPath, withIntermediateDirectories: true, attributes: nil)
// Check to see if file exists, move file, error handling
}
else if isDirectory {
// Check to see if parent path is writable, move file, error handling
}
else {
// Parent path exists and is a file, error handling
}
}
您可能还想使用fileExistsAtPath:isDirectory:variant,以便处理其他错误情况。
也是如此答案 1 :(得分:0)
我已将此扩展名添加到FileManager
中以实现此目的
extension FileManager {
func moveItemCreatingIntermediaryDirectories(at: URL, to: URL) throws {
let parentPath = to.deletingLastPathComponent()
if !fileExists(atPath: parentPath.path) {
try createDirectory(at: parentPath, withIntermediateDirectories: true, attributes: nil)
}
try moveItem(at: at, to: to)
}
}