当前位置: 首页 > 面试题库 >

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

王念
2023-03-14
问题内容

在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)")
}

但是我收到以下错误:

无法创建目录错误域= 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()。

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)")
}

路径不正确(注意文件://):

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

正确的路径:

/ var / mobile /容器/数据/应用程序/ F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7 / Documents /
logs /



 类似资料:
  • 问题内容: 我在这里遇到的一个问题可能是一个我忽略的非常简单的答案……如何使用NSURL检索本地文件?我在这里: 但是,在成功构建之后,它将挂在var urlpath上。我到处搜寻,并在这里和其他地方尝试了一些建议,但无济于事。请帮忙?:( 问题答案: 您正在尝试从文件系统而不是从Web加载文件。 对于创建,您需要使用fileURLWithPath:类方法。 更改您的方法,例如: 迅捷2 迅捷3

  • 问题内容: 我想使用python创建一个带有路径的文件。我一直在使用where 。我一直在寻找的非目录版本,但是却找不到任何东西。是否有类似这样的工具可以创建文件而无需打开文件,也无需使用系统或popen /subprocess? 问题答案: 有没有方法来创建,而无需打开文件时,它 有( 但它需要在OSX root权限 )。创建文件的系统调用实际上带有该标志。因此,无论如何,您将始终打开文件。 因

  • 我知道使用,我们可以创建MPEG-DASH就绪文件,包括段和. mpd清单文件。例如,我正在尝试这个有效的命令: 但我不想分割视频,所以我们有一个更简单的版本,整个视频有多个版本,没有块。MPEG-DASH允许吗?如果是这样的话,我如何使用在不创建块的情况下完成它?

  • 创建和使用钱包文件 为了离线脱机交易,你需要有你的钱包文件或与私密钱包/账户相关的公共和私人密钥。 web3j能够为你生成一个新的安全的以太坊钱包文件Ethereum wallet file,或者与也可以通过私钥来和现有的钱包文件一起工作。 创建新的钱包文件: String fileName = WalletUtils.generateNewWalletFile( "your pa

  • 我一直试图简单地打开一个文件在一个C++非常基本的代码,代码是建立正常的,但当它运行,文件不是创建。请注意,我以前处理过文件,从来没有遇到过这个问题。 输出总是错误!

  • 问题内容: 请告诉我有关构建我的应用并在真实iPhone上使用它的完整过程。 问题答案: Xcode 8.0中有一些更改 步骤1:将 方案目的地更改为Generic IOS device。 步骤2: 单击Product>> Archive完成后,打开管理器,然后单击最新版本。 步骤3: 点击Export…管理器窗口右侧的选项。 步骤4: 选择一种导出方法>选择正确的签名>保存到目标。 Xcode