You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中按扩展名筛选文件:返回语句位置错误导致功能异常求助

代码修改方案

现存问题

你的代码当前存在两个关键问题:

  1. 在遍历文件时,找到第一个PDF就立即返回,导致只会返回单个PDF文件,而非目录下所有PDF
  2. 维护了不必要的filesList变量,因为需求仅需返回PDF文档,非PDF文件无需收集

修改步骤及优化

  1. 移除冗余变量:删除filesList,只保留pdffilesList用于存储PDF文件信息
  2. 调整返回时机:将return Ok(pdffilesList)移至foreach循环结束后,确保遍历完所有文件再返回完整的PDF列表
  3. 优化扩展名判断:用StringComparison.OrdinalIgnoreCase忽略大小写,避免因.PDF大写扩展名导致漏判
  4. 可选性能优化:直接用GetFiles("*.pdf")过滤PDF文件,减少遍历开销

修改后的完整代码

public IActionResult GetFiles(string dir)  
{
    if (dir == null || !Directory.Exists(dir)) 
    { 
        return BadRequest(); 
    }
    
    var pdffilesList = new List<FileImage>();
    var dirInfo = new DirectoryInfo(dir);
    // 直接过滤PDF文件,无需后续判断
    var pdfFiles = dirInfo.GetFiles("*.pdf", SearchOption.TopDirectoryOnly);
    
    foreach (var file in pdfFiles)
    {
        var match = Regex.Match(file.FullName, "wwwroot(.*)");
        pdffilesList.Add(new FileImage
        {
            Name = file.Name,
            // 增加匹配失败的 fallback,避免索引越界
            FullName = match.Success ? match.Groups[1].Value : file.FullName,
            LastWriteTime = file.LastWriteTime.ToString("yyyy.MM.dd HH:mm"),
            DirectoryName = file.DirectoryName,
            Length = file.Length,
            Extension = file.Extension
        });
    }
    
    return Ok(pdffilesList);
}    

补充说明

  • 用GetFiles("*.pdf")直接过滤,比遍历所有文件再判断扩展名更高效
  • 正则匹配增加了match.Success判断,避免路径中无wwwroot时抛出索引越界异常

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:50:39