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

C#使用日期时间生成文件夹名时触发异常是什么原因?

异常原因排查

  • 核心问题1:路径拼接不规范
    你当前直接用+号拼接根路径和文件夹名,没有添加目录分隔符,比如textBoxRadarPath.Text值为C:\RadarDownload时,拼接后得到的是C:\RadarDownloadWed 08.21.2024 At 14.30 PM,这是非法的路径格式,会直接触发ArgumentException或者NotSupportedException异常。
    正确的拼接方式应该使用.NET内置的Path.Combine()方法,它会自动处理不同系统的目录分隔符,避免手动拼接出错。
  • 核心问题2:无输入合法性校验
    你没有对两个textBox的输入值做校验:如果输入为空、输入包含非法路径字符、输入路径指向的位置当前用户没有写入权限,调用Directory.CreateDirectory时都会抛出对应异常。
  • 核心问题3:async void事件未处理内部异常
    你的猜测是对的,async void类型的事件处理器抛出的未处理异常不会被常规的上层try-catch捕获,会直接触发程序全局未处理异常导致崩溃,这也是你点击continue后程序直接报错的直接原因。

修复代码示例

修复后的CreateDownloadFolders方法

private void CreateDownloadFolders()
{
    // 先校验输入合法性
    string radarPath = textBoxRadarPath.Text?.Trim() ?? string.Empty;
    string satellitePath = textBoxSatellitePath.Text?.Trim() ?? string.Empty;
    
    if (string.IsNullOrEmpty(radarPath) || string.IsNullOrEmpty(satellitePath))
    {
        throw new ArgumentException("雷达或卫星下载路径不能为空");
    }

    // 校验路径是否包含非法字符
    char[] invalidPathChars = Path.GetInvalidPathChars();
    if (radarPath.Any(invalidPathChars.Contains) || satellitePath.Any(invalidPathChars.Contains))
    {
        throw new ArgumentException("路径包含非法字符");
    }

    string date = DateTime.Now.ToString("ddd MM.dd.yyyy");
    string time = DateTime.Now.ToString("HH.mm tt");
    string folderName = $"{date} At {time}";

    // 用Path.Combine拼接路径,自动处理分隔符
    string fullRadarFolder = Path.Combine(radarPath, folderName);
    string fullSatelliteFolder = Path.Combine(satellitePath, folderName);
    
    Directory.CreateDirectory(fullRadarFolder);
    Directory.CreateDirectory(fullSatelliteFolder);
}

修复后的点击事件(增加异常捕获)

private async void btnStart_Click(object sender, EventArgs e)
{
    try
    {
        CreateDownloadFolders();

        urls = new List<string>();
        lblStatus.Text = "Downloading...";

        rad.GetRadarImages();
        await Task.Delay(5000);
        foreach (string link in rad.links)
        {
            urls.Add(link);
        }

        await sat.DownloadSatelliteAsync();
        foreach (string link in sat.SatelliteUrls())
        {
            urls.Add(link);
        }

        urlsCounter = urls.Count;
        await DownloadAsync();
    }
    catch (Exception ex)
    {
        // 可自定义异常处理逻辑,比如弹框提示用户
        MessageBox.Show($"操作失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        lblStatus.Text = "操作失败";
    }
}

内容的提问来源于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.28 16:09:01