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

C#如何判断目录是否存在子文件夹,避免调用First方法触发序列无元素异常

实现方案

1. 构造函数逻辑修改

按照要求,在调用CheckIfImagesExist()前增加子目录存在性判断,仅当至少一个目标路径下存在子目录时才执行调用,修改后的构造函数代码如下:

public Form1()
{
    InitializeComponent();
    bool hasRadarSubDir = false;
    bool hasSatelliteSubDir = false;

    // 处理雷达路径
    if (!string.IsNullOrEmpty(textBoxRadarPath.Text))
    {
        if (!Directory.Exists(textBoxRadarPath.Text))
        {
            Directory.CreateDirectory(textBoxRadarPath.Text);
            btnStart.Enabled = true;
        }
        else
        {
            // 判断该路径下是否存在子目录
            hasRadarSubDir = Directory.GetDirectories(textBoxRadarPath.Text).Any();
        }
    }

    // 处理卫星路径
    if (!string.IsNullOrEmpty(textBoxSatellitePath.Text))
    {
        if (!Directory.Exists(textBoxSatellitePath.Text))
        {
            Directory.CreateDirectory(textBoxSatellitePath.Text);
            btnStart.Enabled = true;
        }
        else
        {
            // 判断该路径下是否存在子目录
            hasSatelliteSubDir = Directory.GetDirectories(textBoxSatellitePath.Text).Any();
        }
    }

    // 仅当至少一个路径存在子目录时调用方法
    if (hasRadarSubDir || hasSatelliteSubDir)
    {
        CheckIfImagesExist();
    }
}

注:代码中用string.IsNullOrEmpty替代直接判空,兼容文本框为null的边界情况,Any()方法比获取数组后判断长度性能更优。

2. 可选:方法兜底防护(推荐添加)

为了避免后续其他场景调用GetImagesFiles时触发相同异常,建议对获取最新子目录的逻辑增加空判断,用FirstOrDefault替代First,修改对应代码块如下:

雷达路径逻辑修改

else
{
    var t = new DirectoryInfo(textBoxRadarPath.Text).GetDirectories()
              .OrderByDescending(d => d.LastWriteTimeUtc)
              .FirstOrDefault();
    // 仅当子目录存在时才读取文件
    if (t != null)
    {
        filesRadar = System.IO.Directory.GetFiles(t.FullName,
                      "*.gif", SearchOption.AllDirectories).OrderBy(x => x).ToArray();
        Array.Sort(filesRadar, new MyComparer(true));
    }
}

卫星路径逻辑修改

else
{
    var t = new DirectoryInfo(textBoxSatellitePath.Text).GetDirectories()
              .OrderByDescending(d => d.LastWriteTimeUtc)
              .FirstOrDefault();
    // 仅当子目录存在时才读取文件
    if (t != null)
    {
        filesSatellite = System.IO.Directory.GetFiles(t.FullName,
                      "*.gif", SearchOption.AllDirectories).OrderBy(x => x).ToArray();
        Array.Sort(filesSatellite, new MyComparer(false));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:06