【问题标题】:Multiple Wildcards in C#C#中的多个通配符
【发布时间】: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


【解决方案1】:

感谢您这么快回复!

执行以下操作:

if (subDirectory.ToLower().StartsWith("c:\\users\\") && subDirectory.ToLower().Contains("\\appdata\\local\\application data"))
{
    continue;
}

图片来源:Rufus L

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2021-03-15
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多