绕过 Windows 兼容性链接目录

本文关键字:链接 兼容性 Windows 绕过 | 更新日期: 2024-10-31 13:22:52

Windows 7有许多目录,这些目录具有古代的名称,无法访问。我的意思是像"C:''Documents and Settings"和"C:''Dokumente und Einstellungen"这样的目录,其中真正的文件夹是"C:''Users"。另一个是本地化系统上的"C:''Program"。这些目录在使用 Directory.GetDirectories 迭代所有目录时显示,但无法访问。尝试访问它们时,会抛出UnauthorizedAccessException。我可以抓住它,但它会导致额外的时间,减慢我的扫描速度。我宁愿首先避免查看那些假目录。(我想知道为什么它们甚至在那里,以及我是否可以删除它们,但这是另一个问题。

那么,在真正落入陷阱之前检测这些陷阱的好方法是什么呢?我想这是某种链接,但是有不同类型的链接(以及来自NTFS内部的东西,没有一个世俗用户可以自己创建),但我仍然不知道如何从代码中检测到它。

我知道我仍然需要处理该异常,但是如果我事先知道操作不起作用,我不想这样做以保持快速。磁盘扫描已经足够慢了。

我的代码不应该以管理权限运行,也不期望在这些链接目录中找到任何有用的东西。

绕过 Windows 兼容性链接目录

DirectoryInfo.FileAttributes包含符号链接文件夹情况下的ReparsePoint属性:

// Code from LinqPad, not sure it compiles in IDE:
DirectoryInfo di = new DirectoryInfo(@"c:'documents and settings");
Console.WriteLine("{0}", di.Attributes);  // Hidden, System, Directory, ReparsePoint, NotContentIndexed

如果性能是您的目标,您可以比递归迭代文件夹做得更好 - 您可以直接读取 MFT。 它并不简单,但它真的很快。 如果您有兴趣,这里有一个做脏活的教程。