在Swift中使用NSFileManager和createDirectoryAtPath

5

我想创建一个新文件夹,但是我不知道如何正确使用createDirectoryAtPath方法。

根据文档,以下是正确的语法:

NSFileManager.createDirectoryAtPath(_:withIntermediateDirectories:attributes:error:)

我尝试了这个:
let destinationFolder: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let deliverablePath: NSURL = NSURL.fileURLWithPath("\(destinationFolder)/\(arrayOfProjectIDs[index])")!
NSFileManager.createDirectoryAtPath(deliverablePath, withIntermediateDirectories: false, attributes: nil, error: nil)

但是这让我遇到了错误

在调用中出现了额外的参数'withIntermediateDirectories'

我也尝试了很多变化,删除参数等等,但是我无法使其不出错运行。有什么想法吗?

4个回答

10

Swift 2.0的方式:

do {
    var deliverablePathString = "/tmp/asdf"
    try NSFileManager.defaultManager().createDirectoryAtPath(deliverablePathString, withIntermediateDirectories: false, attributes: nil)
} catch let error as NSError {
    NSLog("\(error.localizedDescription)")
}

5

你忘记添加 defaultManager() 并将 NSURL 转换为字符串。

你可以尝试用这个替换:

NSFileManager.defaultManager().createDirectoryAtPath(deliverablePath.URLString, withIntermediateDirectories: false, attributes: nil, error: nil)

var deliverablePathString = deliverablePath.absoluteString

NSFileManager.defaultManager().createDirectoryAtPath(deliverablePathString, withIntermediateDirectories: false, attributes: nil, error: nil)

希望这可以帮助到您。

2
如果你要创建URL,最好使用createDirectoryForURL。此外,如果您将URL的路径传递给函数,应该使用fileSystemRepresentation而不是absoluteString - sbooth

3

createDirectoryAtPath 需要一个 String 作为第一个参数,而不是一个 URL。尝试直接传递路径或使用 URL-friendly 变体 createDirectoryForURL

这里有一个例子:

NSFileManager.defaultManager().createDirectoryAtPath("/tmp/fnord", withIntermediateDirectories: false, attributes: nil, error: nil)


1
基于seb的上述代码。 当我在我的函数中使用它时,我不得不添加一个通用的catch。 这样可以消除“此处抛出的错误未被处理,因为封闭的catch不是全面的”错误。
do {
    var deliverablePathString = "/tmp/asdf"
    try NSFileManager.defaultManager().createDirectoryAtPath(deliverablePathString, withIntermediateDirectories: false, attributes: nil)
} catch let error as NSError {
    NSLog("\(error.localizedDescription)")
} catch {
    print("general error - \(error)", appendNewline: true)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接