gpt4 book ai didi

swift - 如何判断某个路径中是否存在符号链接(symbolic link)?

转载 作者:行者123 更新时间:2023-12-03 16:16:16 24 4
gpt4 key购买 nike

我有一个原始文件,/path/to/foo.txt,以及一个指向它的符号链接(symbolic link),/other/path/to/foo.txt。我删除了 /path/to/foo.txt,但保留了符号链接(symbolic link)。 如何使用 Cocoa API 判断符号链接(symbolic link)仍然存在?

<小时/>

我通过使用标准/推荐 FileManager.fileExists(atPath:) 找到了这个。对于任何不熟悉该 API 的人来说,这里的问题是它遍历符号链接(symbolic link)。所以,当我这样做时:

FileManager.default.fileExists(atPath: "/other/path/to/foo.txt")

它返回false,因为它看到我给了它一个符号链接(symbolic link)并解析了它,然后看到解析的路径中没有文件。

正如文档所述:

If the file at path is inaccessible to your app, perhaps because one or more parent directories are inaccessible, this method returns false. If the final element in path specifies a symbolic link, this method traverses the link and returns true or false based on the existence of the file at the link destination.

FileManager 中似乎没有替代方案。因此,我想知道是否可以调用 Cocoa API 来判断那里是否存在符号链接(symbolic link),或者是否必须求助于 C 或 Bash API。

最佳答案

为此,您不需要/使用 FileManager。并且您不应该再对任何使用字符串文件路径。

从文件 URL 开始 - “/other/path/to/foo.txt”的 URL 版本。现在读取文件的 .isSymbolicLink 资源键并查看它是否是符号链接(symbolic link)。如果是,但如果指向的文件不存在,则您知道您的链接已损坏。

我在 Playground 上写了一个小测试:

let url = URL(fileURLWithPath: "/Users/mattneubelcap/Desktop/test.txt")
if let ok = try? url.checkResourceIsReachable(), ok {
let vals = url.resourceValues(forKeys: [.isSymbolicLinkKey])
if let islink = vals.isSymbolicLink, islink {
print("it's a symbolic link")
let dest = url.resolvingSymlinksInPath()
let report = dest != url ? "It exists" : "It doesn't exist"
print(report)
}
}

关于swift - 如何判断某个路径中是否存在符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51901378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com