我有一个foreach循环,尝试捕获,最后。它通过文件夹中的文件,最后将它们全部删除....但现在,如果我有两个文件,因为它删除所有(我需要删除所有因为应用程序功能)它不会通过第二个文件。是不是可以让foreach循环完成然后删除foreach方法中的所有文件这里是一个例子:
foreach (DirectoryInfo directory in directories)
{
foreach (FileInfo file in directory.GetFiles("*.csv"))
{
try
{
//do something with file
}
catch (Exception e)
{
//catch exception
}
finally
{
if (!IsFileLocked(file))
{
string[] files = Directory.GetFiles(@"C:\Test");
foreach (string filetoDelete in files)
{
File.Delete(filetoDelete);
}
}
}
}
}
希望它足够清楚。
答案 0 :(得分:5)
您的代码:
您不应该删除刚处理的文件,或者至少删除当前正在处理的目录中的文件,而不是“C:\ Test”中的文件吗?
答案 1 :(得分:2)
我不太确定我是否理解你所要求的是什么,但对我而言,似乎解决方案非常简单,就像这样:
foreach (DirectoryInfo directory in directories)
{
foreach (FileInfo file in directory.GetFiles("*.csv"))
{
try
{
//do something with file
}
catch (Exception e)
{
//catch exception
}
}
foreach(FileInfo fileToDeleteInfo...)
{
try
{
if (!IsFileLocked(fileToDeleteInfo))
{
string[] files = Directory.GetFiles(@"C:\Test");
foreach (string filetoDelete in files)
{
File.Delete(filetoDelete);
}
}
}
catch(...)
{... }
}
换句话说,将文件删除从第二个(嵌套)foreach
移动到新文件中。
如果这不是您所要求的,请澄清。