C# 是否忽略异常并将文件添加到列表?

C# 是否忽略异常并将文件添加到列表?,c#,attributes,readonly,C#,Attributes,Readonly,我昨天问了一个问题,得到了很大的帮助(尤其是@AviTurner) 我进一步开发了我昨天正在开发的程序,我遇到了一个新问题 我的程序代码可以找到 它的基本功能是: 用户可以选择目录的路径,程序将扫描所有文件以获取只读属性 它在当前没有只读属性的文件上设置只读属性 现在,当遇到当前正在使用的文件(如系统文件)时,问题就会出现 有人告诉我这是没有办法的,但我想: 有没有办法忽略错误(我的意思是继续程序,跳过这个文件);并将文件名添加到列表中,以便以后跟踪 我希望我把问题说清楚 谢谢。尝试在try/c

我昨天问了一个问题,得到了很大的帮助(尤其是@AviTurner)

我进一步开发了我昨天正在开发的程序,我遇到了一个新问题

我的程序代码可以找到

它的基本功能是:

用户可以选择目录的路径,程序将扫描所有文件以获取只读属性

它在当前没有只读属性的文件上设置只读属性

现在,当遇到当前正在使用的文件(如系统文件)时,问题就会出现

有人告诉我这是没有办法的,但我想:

有没有办法忽略错误(我的意思是继续程序,跳过这个文件);并将文件名添加到列表中,以便以后跟踪

我希望我把问题说清楚


谢谢。

尝试在try/catch中环绕您的代码:

try
{
    System.IO.FileAttributes attr = System.IO.File.GetAttributes(file);
}
catch(Exception ex)
{
    files.add(file)
}

基本上,如果在try块中出现异常,程序将围绕try/catch中的代码执行catch块

try
{
    System.IO.FileAttributes attr = System.IO.File.GetAttributes(file);
}
catch(Exception ex)
{
    files.add(file)
}
基本上,如果在try块中出现异常,程序将执行catch块

我建议

try
{
    System.IO.File.SetAttributes(file, attr);
}
catch // You can specify a specific error with catch(UnauthorizedAccessException ex) for instance.
{
    filesInError.Add(file); // A list<string>() to keep track of errors.
}
试试看
{
System.IO.File.SetAttributes(文件,attr);
}
catch//例如,您可以使用catch(UnauthorizedAccessException ex)指定特定错误。
{
filesInError.Add(file);//用于跟踪错误的列表()。
}
这里是SetAttributes()引发的详细信息和异常。

如果你不熟悉try-catch,请给出一些解释。 我建议

try
{
    System.IO.File.SetAttributes(file, attr);
}
catch // You can specify a specific error with catch(UnauthorizedAccessException ex) for instance.
{
    filesInError.Add(file); // A list<string>() to keep track of errors.
}
试试看
{
System.IO.File.SetAttributes(文件,attr);
}
catch//例如,您可以使用catch(UnauthorizedAccessException ex)指定特定错误。
{
filesInError.Add(file);//用于跟踪错误的列表()。
}
这里是SetAttributes()引发的详细信息和异常。

如果你不熟悉try-catch,请给出一些解释。

@wudzik我应该做一个
捕获(异常)
然后在给出错误的代码段周围放上括号吗?我以前从未使用过catch函数。@wudzik我应该做一个
catch(Exception)
,然后在给出错误的代码段周围放上括号吗?我以前从未使用过catch函数;然而,它给了我另一个问题。现在我得到错误“名称'attr'在currenct上下文中不存在。我认为这是因为'attr'是在父范围中声明的(正确吗??)。我该如何帮助呢?哦,对了…只要将使用attr的所有其他代码粘贴到try块中即可。我明白了。现在它可以工作了。非常感谢。我现在了解try/catch的工作方式。我的捕获看起来如下:
catch(Exception Ex){Console.SetCursorPosition(2,2);Console.ForegroundColor=ConsoleColor.Red;Console.WriteLine(“更改文件属性时出错”);errorfiles.Add(file);}
这会正确地将文件添加到“errorfiles”列表中吗“好像,很高兴我能帮上忙!隐马尔可夫模型。。有些东西不起作用。一段代码给出了错误。当我运行我的程序时,它会得到一个异常并停止@the
foreach(System.IO.目录中的字符串文件
等)(查看上面的链接以获取参考),并说检索文件信息时出错,因为访问被拒绝。因此我想我也应该对此设置一个try/catch,但我希望它继续foreach循环,刚才跳过“捕获”的文件。我已经尝试过这样做,但它给了我另一个问题。现在我得到了错误“名称'attr'在currenct上下文中不存在。我认为这是因为'attr'是在父作用域中声明的(正确吗??)。我该如何帮助呢?哦,对了…只要将使用attr的所有其他代码粘贴到try块中即可。我明白了。现在它可以工作了。非常感谢。我现在了解try/catch的工作方式。我的捕获看起来如下:
catch(Exception Ex){Console.SetCursorPosition(2,2);Console.ForegroundColor=ConsoleColor.Red;Console.WriteLine(“更改文件属性时出错”);errorfiles.Add(file);}
这会正确地将文件添加到列表“errorfiles”中吗?似乎,很高兴我能帮上忙!嗯……有些东西不起作用。一段代码出现错误。当我运行我的程序时,它出现异常并停止@the
foreach(System.IO.Directory
等中的字符串文件)(查看上面的链接以获取参考),并说检索文件信息时出错,因为访问被拒绝。因此我想我也应该对此进行尝试/捕获,但我希望它继续foreach循环,刚才跳过“捕获”的文件。