【发布时间】:2018-05-22 19:08:15
【问题描述】:
在递归遍历 c:\Users 时,我遇到了 c:\Users\username\AppData\Local\Application Data\Application Data\Application Data ... 永远存在的问题。
我找到了一篇文章here,其中讨论了快捷方式 \Application Data\ 是什么以及它存在的原因。
也与此post有关。
我需要做的是继续遍历这个子文件夹。
有没有办法做这样的事情? :
foreach (string file in Directory.GetFiles(path)
{
do stuff
}
foreach (string subdir in Directory.GetDirectories(path)
{
if (subdir == "c:\\Users\\*\\AppData\\Local\\Application Data\\*")
{
continue;
}
recusivecall(subdir);
}
【问题讨论】:
-
它不会为你这样做。您可以编写一个获取用户名并搜索
$@"c:\Users\{userName}\AppData\Local\Application Data\"的方法。枚举 c:\Users 下的用户名目录并将每个目录依次传递给该方法。或者您可以雄心勃勃并编写一个多级通配符目录枚举器。这将是一个有趣的练习;路径解析在 Windows 中很容易。 -
if (subDir.ToLower().StartsWith("c:\\users\\") && subDir.Contains("\\appdata\\local\\application data\\")) continue;如果您有更多通配符,您可能必须使用string.IndexOf()方法来确保您要搜索的部分的顺序正确,或者只使用正则表达式。 -
另一个想法(如果您想一次性处理文件)是通过将每个路径存储在列表中来跟踪您去过的地方,然后
if (pathList.Contains(subdir)) continue; pathList.Add(subdir); recursiveCall(subdir); -
@RufusL 该列表最终会包含每个文件和子文件还是仅包含当前目录中的文件?
-
每个目录,以防止碰到一个路口,让您回到以前去过的地方。
标签: c# windows filesystems