C# 用于删除不在列表中的文件的方法将删除目录中的所有内容

C# 用于删除不在列表中的文件的方法将删除目录中的所有内容,c#,C#,我在这个网站上搜索了删除文件夹中所有文件的最佳方法,这些文件没有在文件名列表中指定。我遇到过这个。它应该能工作,但不能。我试图给它提供一个文件名列表,但最后它总是想删除每个文件。。。任何人都能看到语法上的问题,好吗 public void deletefilesException(字符串目录,列表排除) { var files=System.IO.Directory.GetFiles(Directory).Where(x=>!excludes.Contains(System.IO.Path.Ge

我在这个网站上搜索了删除文件夹中所有文件的最佳方法,这些文件没有在文件名列表中指定。我遇到过这个。它应该能工作,但不能。我试图给它提供一个文件名列表,但最后它总是想删除每个文件。。。任何人都能看到语法上的问题,好吗

public void deletefilesException(字符串目录,列表排除)
{
var files=System.IO.Directory.GetFiles(Directory).Where(x=>!excludes.Contains(System.IO.Path.GetFileName(x));
foreach(文件中的var文件)
{
//Trace.WriteLine(“smazalobyse”+文件);
System.IO.File.Delete(文件);
}
}
我的日志:

排除包含:C:\Users\benze\OneDrive\Plocha\Repozitáře\zeroapp raven launcher\zeroapp\bin\Debug\Addons#44RR_Main\index.xml


deleteFilesException将删除:C:\Users\benze\OneDrive\Plocha\Repozitáe\zeroapp raven launcher\zeroapp\bin\Debug\Addons\44RR\u Main\index.xml

System.IO.Directory.GetFiles(Directory)
返回完整文件路径(字符串)列表

System.IO.Path.GetFileName(x)
只返回不带路径的文件名。因此,您将文件的完整路径与返回始终为false的文件名进行比较

请尝试以下代码:

public void DeleteFilesExcept(string directory, List<string> excludes)
{
   var files = System.IO.Directory.GetFiles(directory).Where(x => !excludes.Contains(x));
   foreach (var file in files)
   {
      //Trace.WriteLine("Smazalo by se " + file);
      System.IO.File.Delete(file);
   }
}
public void deletefilesException(字符串目录,列表排除)
{
var files=System.IO.Directory.GetFiles(Directory).Where(x=>!excludes.Contains(x));
foreach(文件中的var文件)
{
//Trace.WriteLine(“smazalobyse”+文件);
System.IO.File.Delete(文件);
}
}

您试过调试代码吗?
排除
系统.IO.Directory.GetFiles(Directory)
中的值是什么?很遗憾,我已经试过了。我将用更多信息更新问题,请稍等。记住,在比较字符串时大小写很重要。
System.IO.Directory.GetFiles(Directory)
会给您提供多少?那么,
System.IO.Directory.GetFiles(Directory).Where(x=>!excludes.Contains(System.IO.Path.GetFileName(x))
会给您提供多少?
excludes
是否包含有效路径或任何内容?如果将目录作为参数,System.IO.Path.GetFileName(x)只返回“文件夹”的名称。它不会返回该文件夹中的文件名。@benedikz你确定吗?这对我没用!确实如此,您只需从中删除
System.IO.Path.GetFileName()
,它就会成为
var files=System.IO.Directory.GetFiles(Directory)。其中(x=>!excludes.Contains(x))
,正如Sebastian所说的那样