You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中搜索指定子目录(XYZ、ABC)并获取其文件名称的方法

解决方法:查找指定子目录并提取其中的文件名

嘿,我来帮你搞定这个问题!你现在的代码有个小坑——Directory.GetDirectories(root)返回的是完整路径(比如C:\YourRoot\XYZ),直接用Equals("XYZ")肯定匹配不上,得先提取目录名再判断。另外你要同时找XYZABC两个目录,我给你一步步梳理:

第一步:修正目标目录的查找逻辑

先把要找的目录名存起来,然后通过Path.GetFileName()提取每个目录的名称,再判断是否在目标列表里:

string rootPath = @"你的根目录完整路径"; // 比如 @"C:\MyRootFolder"
// 用HashSet存储目标目录名,查找效率更高
var targetDirNames = new HashSet<string> { "XYZ", "ABC" };

// 筛选出根目录下的目标子目录
IEnumerable<string> targetDirectories = Directory.GetDirectories(rootPath)
    .Where(dir => targetDirNames.Contains(Path.GetFileName(dir)));

第二步:遍历目录获取文件名

找到目标目录后,用Directory.GetFiles()就能获取里面的文件了。这里分两种常用情况:

情况1:只获取当前目录下的文件(不含子目录)

foreach (var dir in targetDirectories)
{
    Console.WriteLine($"=== 处理目录: {dir} ===");
    // 获取当前目录下所有文件的完整路径
    string[] files = Directory.GetFiles(dir);
    
    foreach (var filePath in files)
    {
        // 如果你只需要文件名(不带路径),用Path.GetFileName()
        string fileName = Path.GetFileName(filePath);
        Console.WriteLine($"找到文件: {fileName}");
        // 要是需要完整路径,直接用filePath就行
    }
}

情况2:获取目录及所有子目录下的文件

如果要递归查找子目录里的文件,给GetFiles加个SearchOption.AllDirectories参数:

foreach (var dir in targetDirectories)
{
    Console.WriteLine($"=== 处理目录(含子目录): {dir} ===");
    string[] allFiles = Directory.GetFiles(dir, "*", SearchOption.AllDirectories);
    
    foreach (var filePath in allFiles)
    {
        string fileName = Path.GetFileName(filePath);
        Console.WriteLine($"找到文件: {fileName}");
    }
}

关键注意点

  • 一定要用Path.GetFileName()提取目录名,避免完整路径匹配失败的问题
  • HashSet存储目标目录名,比普通数组的查找效率更高(尤其是当目标目录数量多的时候)
  • 如果需要处理大量文件,建议用Directory.EnumerateFiles()代替GetFiles(),它是流式返回,内存占用更低

内容的提问来源于stack exchange,提问作者Tech Learner

火山引擎 最新活动