如何循环访问在排除特定字符的文件夹停止的目录

本文关键字:字符 文件夹 排除 何循环 循环 访问 | 更新日期: 2023-09-27 17:56:02

我想遍历一个目录并停止在不以"@"结尾的第一个文件夹

这是我到目前为止尝试的(基于本网站的另一个问题):

string rootPath = "D:''Pending''Engineering''Parts''3";
string targetPattern = "*@";
string fullPath = Directory
                 .EnumerateFiles(rootPath, targetPattern, SearchOption.AllDirectories)                                               
                 .FirstOrDefault();
if (fullPath != null)
    Console.WriteLine("Found " + fullPath);
else
    Console.WriteLine("Not found");

我知道*@不正确,不知道该怎么做。
我也遇到了问题SearchOption Visual studio说"这是一个模棱两可的参考"。

最终,我希望代码获取此文件夹的名称并使用它来重命名其他文件夹。

最终解决方案

我最终使用了dasblikenlight和user3601887的组合

string fullPath = Directory
                   .GetDirectories(rootPath, "*", System.IO.SearchOption.TopDirectoryOnly)
                   .FirstOrDefault(fn => !fn.EndsWith("@"));

如何循环访问在排除特定字符的文件夹停止的目录

由于EnumerateFiles模式不支持正则表达式,因此需要获取所有目录,并在 C# 端进行筛选:

string fullPath = Directory
    .EnumerateFiles(rootPath, "*", SearchOption.AllDirectories)                                               
    .FirstOrDefault(fn => !fn.EndsWith("@"));

或者只是将枚举文件替换为 GetDirectory

string fullPath = Directory
                 .GetDirectories(rootPath, "*@", SearchOption.AllDirectories)
                 .FirstOrDefault();