如何检查 Swift URL 是否代表文件或目录?
URL 对象有一个hasDirectoryPath
属性,但其背后似乎没有任何“智能”。它仅反映isDirectory
传递给 URL 的值。
代码:
let URL1 = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
print(URL1.hasDirectoryPath)
let URL2 = URL(fileURLWithPath: FileManager.default.currentDirectoryPath, isDirectory: true)
print(URL2.hasDirectoryPath)
Run Code Online (Sandbox Code Playgroud)
输出:
false
true
Run Code Online (Sandbox Code Playgroud)
Leo*_*bus 24
这个名字说明了一切“hasDirectoryPath”。它没有说明 URL 是一个目录并且它存在。它说它有一个目录路径。要确保 URL 是目录,您可以获取 URL ResourceKey isDirectoryKey:
extension URL {
var isDirectory: Bool {
(try? resourceValues(forKeys: [.isDirectoryKey]))?.isDirectory == true
}
}
Run Code Online (Sandbox Code Playgroud)
我只是简化并升级了 Leo 的回答,并获得了更好的回报。
信息:在我的回答中,您会得到 3 个可能的结果,true表示 url 是一个目录,false表示它不是目录,而是一个文件!nil意味着它不是一个 Dir 或文件,因为我们可以给 url 一个虚拟 url 或一个网站,在这种情况下,您将返回 nil 以及来自 Swift 的额外信息,说明为什么返回为零,并帮助您解决问题,让你知道url的情况如何。对于当前接受的答案,虚拟 URL 或无效 URL 可能会被某些开发人员误认为是文件。
extension URL {
var isDirectory: Bool? {
do {
return (try resourceValues(forKeys: [URLResourceKey.isDirectoryKey]).isDirectory)
}
catch let error {
print(error.localizedDescription)
return nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7136 次 |
最近记录: |