【问题标题】:FileManager.default.fileExists says documents directory does not exist [duplicate]FileManager.default.fileExists 说文档目录不存在[重复]
【发布时间】:2019-06-09 01:10:24
【问题描述】:

FileManager.default.contentsOfDirectory 声称文档目录不存在,尽管它显然存在。我在运行 iOS 12.1.2 的实际 iPhone SE 上使用 Swift 4.2

我正在使用以下内容在我的应用程序中读取 downloads 目录的内容:

do {
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let downloadedContents = try FileManager.default.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
    print(downloadedContents)
} catch {
    print("Error while enumerating contents: \(error.localizedDescription)")
}

这会打印以下内容,告诉我文档目录中存在一个文件:

[file:///private/var/mobile/Containers/Data/Application/698F8D51-92AF-4BAB-A212-0A0982090550/Documents/example-file/]

(我在下载应用内购买后将文件从缓存目录中移到了那里,但我认为这与这个问题无关)。

稍后在我的代码中,我想检查文件是否已下载。我正在使用以下内容:

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let path = URL(fileURLWithPath: "example-file", relativeTo: documentsURL)
var isDir : ObjCBool = false
if FileManager.default.fileExists(atPath: path.standardizedFileURL.absoluteString, isDirectory: &isDir) {
    if isDir.boolValue {
        return true
    } else {
        return false // file exists but is not directory
    }
} else {
    return false // file does not exist at all
}

但这总是返回 false,即使 contentsOfDirectory 表明它存在。

调试的时候,我也试过:

let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
po FileManager.default.fileExists(atPath: documentsURL.standardizedFileURL.absoluteString)

但这也返回 false。现在我很确定我只是错误地使用了fileExists 方法。

谁能发现我做错了什么?

【问题讨论】:

标签: ios swift nsfilemanager


【解决方案1】:

原来应该使用documentsURL.path,而不是任何类型的 URL。

路径以 /var/mobile... 开头,而 URL 以 file:///var... 开头

【讨论】:

  • 你的意思是你需要使用path而不是absoluteString
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 2011-04-26
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
相关资源
最近更新 更多