FileManager.default.fileExists 表示文档目录不存在
FileManager.default.fileExists says documents directory does not exist
FileManager.default.contentsOfDirectory
声称文档目录不存在,尽管它显然存在。我在实际的 iPhone SE 运行 iOS 12.1.2
上使用 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
}
但这总是 returns 错误,即使 contentsOfDirectory
表明它存在。
调试的时候,我也试过:
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
po FileManager.default.fileExists(atPath: documentsURL.standardizedFileURL.absoluteString)
但这也是 returns 错误的。现在我很确定我只是错误地使用了 fileExists
方法。
谁能发现我做错了什么?
原来应该使用 documentsURL.path
,而不是任何一种 URL。
路径以 /var/mobile...
开头,而 URL 以 file:///var...
开头
FileManager.default.contentsOfDirectory
声称文档目录不存在,尽管它显然存在。我在实际的 iPhone SE 运行 iOS 12.1.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
}
但这总是 returns 错误,即使 contentsOfDirectory
表明它存在。
调试的时候,我也试过:
let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
po FileManager.default.fileExists(atPath: documentsURL.standardizedFileURL.absoluteString)
但这也是 returns 错误的。现在我很确定我只是错误地使用了 fileExists
方法。
谁能发现我做错了什么?
原来应该使用 documentsURL.path
,而不是任何一种 URL。
路径以 /var/mobile...
开头,而 URL 以 file:///var...