Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除除某些文件夹外的所有文件夹_C#_Linq_Foreach - Fatal编程技术网

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什么东西确实不起作用。请说得更具体些,到底是什么不起作用。请说得更具体些。