iOS9 Swift Создание файла NSFileManager.createDirectoryAtPath с NSURL
До iOS9 мы создали директорию примерно так
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 они удалили String.stringByAppendingPathComponent. Инструмент автоматического преобразования заменил использование 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)")
}
Но я получаю следующую ошибку:
Невозможно создать каталог Ошибка Domain=NSCocoaErrorDomain Code=513 "У вас нет прав на сохранение файла" logs "в папке" Documents "." UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/, NSUnderlyingError=0x15664d070 {Ошибка домена =NSPOSIXErrorDomain Code=1 " "}}
2 ответа
Я понял это. createDirectoryAtPath() не может обработать путь с префиксом "file://". Чтобы получить путь без префикса, вы должны использовать path() или lativePath().
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)")
}
Неверный путь (файл уведомления://):
Файл: /// вар / мобильный / Контейнеры /Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/ Документы / журналы /
Правильный путь:
/ Var / мобильный / Контейнеры / данных / Применение / F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7 / Документы / журналы /
Свифт 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)")
}
Swift 4
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let logsPath = paths[0].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)")
}