比较字符串数组与“ FileInfo / GetFiles”

时间:2018-12-29 08:29:23

标签: c# arrays compare getfiles

我有一个string数组,其中包含我要保留在文件夹中的所有“ 重要文件”名称。该文件夹包含txt之类的“ spam.txt”之类的txt文件,以及1个名为“ vital.txt”的文件

目标是将重要文件以外的所有其他文件移动到另一个文件夹

这就是我要做的:

string[] importantFiles = { "vital.txt", "primordial.dll" };

// with currentDir.GetFiles correctly set
foreach (FileInfo fileScanner in currentDir.GetFiles()) 
{
   foreach (string s in importantFiles)
   {
      // Without the "!", works normally, returns matching files
      if (!fileScanner.Name.Equals(s))
      {
           MessageBox.Show(
             "This is SUPPOSED to be a non matching file : " + fileScanner.Name);
      }
      else // nothing

我尝试过的每种方法所面临的问题是“逆向”匹配过程。找到匹配的文件是可以的,但是对我来说,过滤坏文件似乎是不可能的。

1 个答案:

答案 0 :(得分:1)

让我们移动除重要文件以外的所有文件,正如您所描述的:

using System.IO;

...

// HashSet is better collection than array for your task:
//   1. It's faster on Contains operation: O(1) vs O(N)
//   2. It's more convenient - we can provide a comparer
HashSet<string> importantFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {
  "vital.txt", "primordial.dll" 
};

//TODO: Put the right directory names here
foreach (var file in Directory.GetFiles(@"c:\MyDirectory")) {
  if (!importantFiles.Contains(Path.GetFileName(file)))
    File.Move(file, Path.Combine(@"c:\MyDirectoryForSpam", Path.GetFileName(file)));
}