如何在OS X中移动文件并创建缺少的目录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在OS X中移动文件并创建缺少的目录?相关的知识,希望对你有一定的参考价值。

我想将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创建目录?

答案

在过去,我用类似下面的代码的代码解决了这个问题。基本上,您只需检查表示您要创建的文件的父目录的路径中是否存在文件。如果它不存在,则在路径中创建它以及它上面的所有文件夹也不存在。

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,以便处理其他错误情况。同样如此

另一答案

我已将此扩展添加到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)
    }

}

以上是关于如何在OS X中移动文件并创建缺少的目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置x和y移动动画片段的最大/限制?

如何在 Mac OS X 上监视目录中的更改?

将文件夹下的一级目录文件改名并移动目录

缺少 SQL SERVER 2014 代码片段

如何在实时代码应用程序中的Mac OS X上收听特定的文本字符串

在片段着色器问题中读取 image1d