C# 如何删除除某些文件夹外的所有文件夹
你好,我需要删除一个文件夹中的所有文件夹,但我卡住了,因为我不需要删除两个文件夹。我想做这样的事情:C# 如何删除除某些文件夹外的所有文件夹,c#,linq,foreach,C#,Linq,Foreach,你好,我需要删除一个文件夹中的所有文件夹,但我卡住了,因为我不需要删除两个文件夹。我想做这样的事情: string[] dir = Directory.GetDirectories(getDir()); foreach(string r in (dir.Where(x => x.Contains("AutomaticRecepes") == false))&& dir.Where(y => y.Contains("SpecialRecepes") == false
string[] dir = Directory.GetDirectories(getDir());
foreach(string r in (dir.Where(x => x.Contains("AutomaticRecepes") == false))&&
dir.Where(y => y.Contains("SpecialRecepes") == false))
{
Directory.Delete(r, true);
}
正如你所看到的,我想用几行代码删除每个文件夹,除了名为AutomaticRecepes和SpecialRecepes的文件夹
当然,我编写的代码给出了错误:
运算符&&不能应用于“system.collections.generic.ienumerable”和“system.collections.generic.ienumerable”类型的操作数
我怎么做
谢谢您必须将条件更改为:
foreach(string r in dir.Where(x => x.Contains("AutomaticRecepes") == false && x.Contains("SpecialRecepes") == false))
{
Directory.Delete(r, true);
}
&&用于浓缩布尔表达式,但由于Where返回IEnumerable,因此会产生错误。您必须将条件更改为:
foreach(string r in dir.Where(x => x.Contains("AutomaticRecepes") == false && x.Contains("SpecialRecepes") == false))
{
Directory.Delete(r, true);
}
&&用于浓缩布尔表达式,但由于Where返回IEnumerable,因此会产生错误。您可以做的是
List<string> FileNames = dir.Where(x => !x.Contains("AutomaticRecepes") && !x.Contains("SpecialRecepes")).ToList();
FileNames.ForEach(x => Directory.Delete(x, true));
你能做的就是
List<string> FileNames = dir.Where(x => !x.Contains("AutomaticRecepes") && !x.Contains("SpecialRecepes")).ToList();
FileNames.ForEach(x => Directory.Delete(x, true));
试试这个:
var toExclude = new []{"AutomaticRecepes", "SpecialRecepes"};
var dir = Directory.GetDirectories(getDir()).Where(x => !toExclude.Any(y => x.Contains(y)));
foreach(string r in dir)
{
Directory.Delete(r, true);
}
试试这个:
var toExclude = new []{"AutomaticRecepes", "SpecialRecepes"};
var dir = Directory.GetDirectories(getDir()).Where(x => !toExclude.Any(y => x.Contains(y)));
foreach(string r in dir)
{
Directory.Delete(r, true);
}
我建议您创建一个新的实例,以便检查文件夹的名称。如果在文件夹的整个路径中使用,并且文件夹的父名称具有排除文件夹的名称,则代码将不起作用。例如,文件夹中名为“要删除”的目录SpecialRecepes将不会被删除
var dirs = new DirectoryInfo(getDir()).EnumerateDirectories(getDir())
.Where(x => x.Name != "AutomaticRecepes" && x.Name != "SpecialRecepes");
foreach (var dir in dirs)
{
dir.Delete(true);
}
我建议您创建一个新的实例,以便检查文件夹的名称。如果在文件夹的整个路径中使用,并且文件夹的父名称具有排除文件夹的名称,则代码将不起作用。例如,文件夹中名为“要删除”的目录SpecialRecepes将不会被删除
var dirs = new DirectoryInfo(getDir()).EnumerateDirectories(getDir())
.Where(x => x.Name != "AutomaticRecepes" && x.Name != "SpecialRecepes");
foreach (var dir in dirs)
{
dir.Delete(true);
}
这份声明的复杂性让人难以阅读,而且似乎让你感到困惑。我建议把它分成多个独立的语句,像这样,让它更具可读性
string[] dirs = Directory.GetDirectories(getDir());
foreach (string dir in dirs)
{
if (!dir.Contains("AutomaticRecepes") &&
!dir.Contains("SpecialRecepes"))
{
Directory.Delete(dir, true);
}
}
正如一位智者曾经说过的:200行明显的代码胜过10行“聪明”的代码:这句话的复杂性让人难以理解,似乎让人困惑。我建议把它分成多个独立的语句,像这样,让它更具可读性
string[] dirs = Directory.GetDirectories(getDir());
foreach (string dir in dirs)
{
if (!dir.Contains("AutomaticRecepes") &&
!dir.Contains("SpecialRecepes"))
{
Directory.Delete(dir, true);
}
}
就像一位智者曾经说过的:200行明显的代码胜过10行“聪明”的代码:你必须替换。。。x、 ContainsAutomaticRecepes==通过删除最后一个括号,使。。。x、 ContainesAutomaticRecepes==False您必须替换。。。x、 ContainsAutomaticRecepes==通过删除最后一个括号,使。。。x、 ContainesAutomaticRecepes==False什么东西确实不起作用。请说得更具体些,到底是什么不起作用。请说得更具体些。