如何在有符号链接的地方列出files/directories
How to list files/directories where there are symbolic links
我有一个带有符号链接的文件夹(该目录上的 cmd dir
,如果有任何区别,将它们列为 SYMLINKD
)。每当我尝试调用 Directory.GetFiles
、Directory.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);
}
我有一个带有符号链接的文件夹(该目录上的 cmd dir
,如果有任何区别,将它们列为 SYMLINKD
)。每当我尝试调用 Directory.GetFiles
、Directory.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);
}