如何在有符号链接的地方列出files/directories

How to list files/directories where there are symbolic links

我有一个带有符号链接的文件夹(该目录上的 cmd dir,如果有任何区别,将它们列为 SYMLINKD)。每当我尝试调用 Directory.GetFilesDirectory.GetDirectories()DirectoryInfo 中的任何其他变体时,都会出现以下异常:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'SYMBOLIC_LINK_PATH'.

我也尝试过使用前缀为 \?\ 的目录(此处提到的“长路径前缀”:https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation

如何遍历目录并删除这些符号链接?我有什么选择可以遍历目录?

(正如评论中所建议的那样,我也尝试过 Directory.GetFiles("DirectorytoSearch", "*", SearchOption.AllDirectories) 并得到相同的结果:DirectoryNotFoundException 尽管 MSDN article 指出此选项应该“包括重新分析点,例如....符号链接")

您提到的文章:
https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation

发布于 2020 年 9 月 15 日,这是最近的事。
您肯定已经更新了正在使用的 .NET 运行时,对吗?

此外,至少需要 Windows 10 版本 1607,请仔细检查您是否已更新。

如果您更新运行时,请检查它的最新更新是否至少在 2020 年 9 月 15 日之后发布。

如果您使用的是 .NET Framework 运行时,请尝试在 .NET Core 运行时中执行此操作,因为它的更新频率更高。

如果一切都失败了,试试这个解决方案:,
否则提交错误报告。

大家的意见帮助我缩小了范围并找出了问题所在。我认为问题是我删除了符号 link 的目标,但我的递归删除功能仍然发现它是一个目录。因此,当我尝试枚举那个符号 link 的 files/directories 时,它抛出了一个 DirectoryNotFound 异常(在那里遇到它肯定令人困惑,因为该目录似乎仍然存在 - 即使在文件资源管理器中,直到您单击在上面)。

解决方案是在尝试收集目录的子级时,捕获 DirectoryNotFound 异常并尝试删除目录。这对我有用

        FileInfo[] files = null;
        try
        {
            files = currentDirectory.GetFiles("*", SearchOption.AllDirectories);
        }
        catch (DirectoryNotFoundException)
        {
            currentDirectory.Delete(true);
        }