如何遍历停止在排除特定字符的文件夹的目录?

时间:2015-06-13 03:11:34

标签: c# directory literate-programming

我想遍历一个目录并停在结束的第一个文件夹中" @"

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

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("@"));

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

或者用 GetDirectories

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