你好我需要删除文件夹中的所有文件夹,但我卡住了因为我不需要删除两个文件夹。我想做这样的事情:
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'类型的操作数
我该怎么做?
谢谢
答案 0 :(得分:2)
您必须将条件更改为:
foreach(string r in dir.Where(x => x.Contains("AutomaticRecepes") == false && x.Contains("SpecialRecepes") == false))
{
Directory.Delete(r, true);
}
&&
用于连接布尔表达式,但由于Where
返回IEnumerable
,因此会产生错误。
答案 1 :(得分:1)
dir.Where(x => !x.Contains("AutomaticRecepes") && !x.Contains("AutomaticRecepes"))
.ToList().ForEach(x=> Directory.Delete(x, true));
答案 2 :(得分:1)
试试这个:
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);
}
答案 3 :(得分:1)
我建议您创建DirectoryInfo
的新实例,以便检查文件夹的名称。如果在文件夹的整个路径中使用Contains
,并且文件夹的父名称包含已排除文件夹的名称,则代码将无法使用(例如,在“SpecialRecepes”文件夹中名为“to-delete”的目录不被删除。
var dirs = new DirectoryInfo(getDir()).EnumerateDirectories(getDir())
.Where(x => x.Name != "AutomaticRecepes" && x.Name != "SpecialRecepes");
foreach (var dir in dirs)
{
dir.Delete(true);
}
答案 4 :(得分:1)
该陈述的复杂性使其难以阅读并且似乎让您感到困惑。我建议将它分解为多个单独的语句,使其更具可读性。
UPDATE Entity
SET createdDate = DATEADD(SECOND, 1, (SELECT em.createdDate FROM Entity em WHERE em.EntityID = (EntityID - 1)))
WHERE createdDate IS NULL;
就像一个聪明人曾经说过的那样:“200行显而易见的代码击败10行'聪明'代码”:)
答案 5 :(得分:0)
你可以做的是
List<string> FileNames = dir.Where(x => !x.Contains("AutomaticRecepes") && !x.Contains("SpecialRecepes")).ToList();
FileNames.ForEach(x => Directory.Delete(x, true));