Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath_Swift_Ios9_Nsfilemanager - Fatal编程技术网

iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath

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

在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中,他们通过追加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)")
}