热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何确定某个路径上是否存在符号链接?

如何解决《如何确定某个路径上是否存在符号链接?》经验,为你挑选了1个好方法。

我有一个原始文件,/path/to/foo.txt并有一个指向它的符号链接/other/path/to/foo.txt。我删除了/path/to/foo.txt,但将符号链接保留在原处。如何使用Cocoa API知道符号链接仍然存在?


我通过使用standard / recommended发现了这一点FileManager.fileExists(atPath:)。对于不熟悉该API的任何人来说,这里的问题是它遍历符号链接。因此,当我这样做时:

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

它返回false,因为它看到我给了它一个符号链接并解决了它,然后看到在解决的路径上没有文件。

如文档所述:

如果path您的应用程序无法访问at中的文件,则可能是由于一个或多个父目录不可访问而导致的,此方法返回false。如果in中的最后一个元素path指定了符号链接,则此方法将遍历该链接并根据truefalse在链接目标位置文件的存在返回。

在中似乎没有其他选择FileManager。因此,我想知道是否可以调用Cocoa API来告知其中是否存在符号链接,或者是否必须使用C或Bash API。



1> matt..:

您不需要/不需要FileManager。你不应该使用字符串的文件路径什么了。

以文件网址开头-您的的网址版本"/other/path/to/foo.txt"。现在,读取文件的.isSymbolicLink资源密钥,看看它是否是符号链接。如果是,但是如果指向的文件不存在,则说明链接已损坏。

我在操场上写了一个小测试:

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


推荐阅读
author-avatar
农村小姑娘0
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有