iOS9 Swift файл создание NSFileManager.createDirectoryAtPath с NSURL

до iOS9 мы создали каталог, подобный so

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let logsPath = documentsPath.stringByAppendingPathComponent("logs")
let errorPointer = NSErrorPointer()
NSFileManager.defaultManager().createDirectoryAtPath(logsPath, withIntermediateDirectories: true, attributes: nil, error: errorPointer)

но с iOS9 они удалили строку.stringByAppendingPathComponent. Инструмент auto convert заменил наше использование String на NSURL. createDirectoryAtPath () принимает строку, поэтому мне нужно преобразовать NSURL в строку. Мы использовали absolutePath так: (обновление для iOS9)

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let logsPath = documentsPath.URLByAppendingPathComponent("logs")
do {
    try NSFileManager.defaultManager().createDirectoryAtPath(logsPath.absoluteString, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
    NSLog("Unable to create directory (error.debugDescription)")
}

, но я получаю следующую ошибку:

не удалось создать домен ошибки каталога=NSCocoaErrorDomain Код=513 "У вас нет разрешения на сохранение файла "logs" в папке "Документы."" UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/, NSUnderlyingError=0x15664d070 {домен ошибок=код NSPOSIXErrorDomain=1 "Операция не разрешена"}}

2 ответов


Я понял это. createDirectoryAtPath () не может обработать путь с префиксом "file://". Чтобы получить путь без префикса, вы должны использовать path () или relativePath ().

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let logsPath = documentsPath.URLByAppendingPathComponent("logs")
do {
    try NSFileManager.defaultManager().createDirectoryAtPath(logsPath.path!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
    NSLog("Unable to create directory \(error.debugDescription)")
}

неверный путь (файл уведомления://):

file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/

исправить путь:

/var / мобильный / контейнеры / данные / приложение/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/документы/журналы/


Swift 3

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let logsPath = documentsPath.appendingPathComponent("logs")
do {
    try FileManager.default.createDirectory(at: logsPath!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
    NSLog("Unable to create directory \(error.debugDescription)")
}