当我尝试在catch块中继续循环时会发生什么

时间:2011-03-14 19:09:10

标签: c# .net

通过字符串搜索文件时会发生什么情况,我可以尝试继续 catch块中的循环以锁定Windows文件,以便读取下一个文件。

TextReader rff = null;
try
{
    rff = new StreamReader(fi.FullName);
    String lne1 = rff.ReadToEnd();
    if (lne1.IndexOf(txt) >= 0)
    {
        z = fi.FullName;
        list22.Add(fi.FullName);

4 个答案:

答案 0 :(得分:2)

只要异常被嵌套在循环内的try-catch捕获,你应该能够continue循环没问题。

答案 1 :(得分:1)

我会说你会在循环中访问文件的语句中有一个try-catch。然后你可以在捕获任何异常后继续循环。

答案 2 :(得分:0)

在捕获异常时尝试仅捕获可能抛出的最特定的异常,因此如果您希望处理锁定情况,您将看到捕获System.IO.IOException,这是在其他人使用文件时引发的。 proccesses。

答案 3 :(得分:0)

如果你要做一些清理工作,你应该添加一个:

foreach (var fileName in fileNames)
{

    var fi = new FileInfo(fileName);
    StreamReader reader;
    try
    {
        reader = new StreamReader(fi.FullName);
        SomeMethodThatThrowsIOException();
    }
    catch (IOException ex)
    {
        continue;
    }
    finally
    {
        if (reader != null)
            reader.Close();
    }
}

甚至更好(因为StreamReader实现了IDisposable)

foreach (var fileName in fileNames)
{

    try
    {

        var fi = new FileInfo(fileName);
        using (var reader = new StreamReader(fi.FullName))
        {
            SomeMethodThatThrowsIOException();
        } 
    }
    catch (IOException ex) { }

}