iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath
在iOS9之前,我们已经创建了这样一个目录iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath,swift,ios9,nsfilemanager,Swift,Ios9,Nsfilemanager,在iOS9之前,我们已经创建了这样一个目录 let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String let logsPath = documentsPath.stringByAppendingPathComponent("logs") let errorPointer = NSErrorPointer() NSFileManag
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中,他们通过追加PathComponent删除了String.stringByAppendingPathComponent。自动转换工具用NSURL取代了我们对字符串的使用。createDirectoryAtPath()接受一个字符串,因此我需要将NSURL转换为字符串。我们像这样使用absolutePath:(针对iOS9更新)
但我得到了以下错误:
无法创建目录错误域=NSCocoaErrorDomain代码=513
“您没有在文件夹中保存文件“日志”的权限。”
“文件”
UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/,
NSUnderlyingError=0x15664d070{Error Domain=NSPOSIXErrorDomain Code=1
“不允许操作”}
我想出来了。createDirectoryAtPath()无法处理前缀为“file://”的路径。要获取不带前缀的路径,必须使用path()或relativePath() 路径不正确(注意文件://): file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/ 正确路径:
/var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/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)")
}
Swift 4
let path=FileManager.default.url(对于:.documentDirectory,在:.userDomainMask中)
让logsPath=路径[0]。追加路径组件(“日志”)
做{
请尝试FileManager.default.createDirectory(位于:logsPath,带中间目录:true,属性:nil)
}将let错误捕获为NSError{
NSLog(“无法创建目录\(错误.debugDescription)”)
}
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)")
}
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)")
}