【问题标题】:How do I make my code skip something if there is an error C# .NET如果 C# .NET 出现错误,如何让我的代码跳过某些内容
【发布时间】:2016-05-06 15:03:50
【问题描述】:

这对我来说真的很难,因为我不知道用于此的正确术语,但基本上我想要完成的是..如果我的代码无法执行,它会跳过并尝试下一件事..不​​确定我是否需要使用 try & catch 循环,但它就在这里。

如您所见,我试图通过按一下按钮从我的临时文件夹中删除内容,这会在我的 PC 上引发错误提示

对路径“文件名”的访问被拒绝。

我希望代码忽略这一点并跳转到下一个文件并尝试该文件,或者更好的是只授予代码访问权限以删除文件,而不是在文件正在使用的情况下。

这可能吗?

private void label6_Click(object sender, EventArgs e)
{
    string tempPath = Path.GetTempPath();
    DirectoryInfo di = new DirectoryInfo(tempPath);

    foreach (FileInfo file in di.GetFiles())
    {
        file.Delete();
    }
}

【问题讨论】:

  • 是的,这是可能的。我认为你走在正确的道路上。

标签: c# .net visual-studio loops


【解决方案1】:
foreach (FileInfo file in di.GetFiles())
{
    try
    {
        file.Delete();
    }
    catch(Exception e)
    {
        // Log error.
    }
}

【讨论】:

  • catch(Exception e) - 再也不要放这样的代码(捕获所有错误),catch(IOException e)
  • 在一些关键的运行情况下使用是可以的。盲目地忽略它同样糟糕。
  • 我想用那个代码但是我从catch中删除了e(异常e),你说它会记录错误,它究竟会在哪里记录错误?
  • 您可以使用e 变量来获取异常信息并随意处理。例如将其记录到控制台。
【解决方案2】:

只需捕获必需的异常(在你的情况下忽略它们):

private void label6_Click(object sender, EventArgs e)
{
    string tempPath = Path.GetTempPath();
    DirectoryInfo di = new DirectoryInfo(tempPath);

    foreach (FileInfo file in di.GetFiles())
    {
        try 
        { 
            file.Delete();
        }
        catch (IOException) 
        {
            // ignore all IOExceptions:
            //   file is used (e.g. opened by some other process)
        }
        catch (SecurityException) {
            // ignore all SecurityException: 
            //   no permission
        } 
        catch (UnauthorizedAccessException) 
        {
            // ignore all UnauthorizedAccessException: 
            //   path is directory
            //   path is read-only file 
        }
    }
}

【讨论】:

    【解决方案3】:

    您想要的是一个非常常见的编程功能,称为异常处理或错误处理。使用此功能,您可以告诉代码在抛出异常时要做什么。在 C#(和大多数语言)中,您使用 try-catch 块。在最基本的情况下,它看起来像:

    try
    {
        file.Delete();
    }
    catch(Exception e)
    {
        //log error or display to user
    }
    
    //execution continues
    

    如果file.Delete() 抛出异常,异常将在catch 块中“捕获”,然后您可以检查异常并采取相应措施,然后再继续。

    一些资源:

    【讨论】:

    • 我该怎么做,所以如果它遇到错误,它就会移动到目录中的下一个项目?
    • @Alexander.Matt 你会将整个 try/catch 包装在某种循环中
    • 您会推荐任何特定的循环吗?
    【解决方案4】:

    你需要捕获异常并决定是否退出循环

    看到这个问题 - How handle an exception in a loop and keep iterating?

    【讨论】:

      【解决方案5】:

      首先,您应该添加条件检查以检查可能引发错误的原因。如果在代码中存在您无法控制的其他条件,请添加 try-catch 语句。

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多