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

C#中Try Catch多场景正确用法:多网络路径容错查询实现

实现方案

以下是两种符合需求的实现方式:

1. 嵌套try-catch写法(固定3个路径场景,逻辑直观无额外复杂度)

这种写法直接适配当前3个路径的需求,不需要额外封装,逻辑一目了然:

try
{
    // 替换为第一个路径的校验、打开目录逻辑
    Process.Start("explorer.exe", @"\\network\path1");
    Console.WriteLine("路径1校验通过,已打开");
}
catch (Exception)
{
    try
    {
        // 替换为第二个路径的校验、打开目录逻辑
        Process.Start("explorer.exe", @"\\network\path2");
        Console.WriteLine("路径2校验通过,已打开");
    }
    catch (Exception)
    {
        try
        {
            // 替换为第三个路径的校验、打开目录逻辑
            Process.Start("explorer.exe", @"\\network\path3");
            Console.WriteLine("路径3校验通过,已打开");
        }
        catch (Exception)
        {
            Console.WriteLine("no paths can be found on this pc");
        }
    }
}

// 任意路径打开成功后会直接执行此处的后续业务逻辑

实现逻辑:每个try块执行对应路径的操作,无异常就自动跳过后续所有嵌套的catch逻辑,直接走后续代码;当前路径执行失败抛出异常时,才会进入catch块尝试下一个路径,三层全部失败则进入最内层catch输出错误提示。

2. 遍历路径集合写法(路径可扩展场景,维护成本更低)

如果后续可能新增需要尝试的路径,这种写法不需要重复嵌套try-catch,只需在路径列表中新增条目即可:

// 按优先级顺序存储所有需要尝试的网络路径
var pathList = new List<string>
{
    @"\\network\path1",
    @"\\network\path2",
    @"\\network\path3"
};

bool openSuccess = false;
foreach (var path in pathList)
{
    try
    {
        // 替换为实际的路径校验、打开目录逻辑
        Process.Start("explorer.exe", path);
        Console.WriteLine($"路径 {path} 校验通过,已打开");
        openSuccess = true;
        // 打开成功直接跳出循环,不再尝试后续路径
        break;
    }
    catch
    {
        // 当前路径失败,跳过继续尝试下一个
        continue;
    }
}

if (!openSuccess)
{
    Console.WriteLine("no paths can be found on this pc");
}

// 后续业务逻辑

补充提示

校验网络路径时建议不要仅依赖Directory.Exists方法,该方法可能因为权限不足、网络临时波动等原因返回错误结果,直接在try块中执行实际的目录打开操作再捕获异常,结果会更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:12:02