将字符串数组与 "FileInfo / GetFiles" 进行比较
Compare string array to "FileInfo / GetFiles"
我有一个 string
数组,其中包含我想保存在文件夹中的所有“重要文件”名称。该文件夹包含 "spam.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
我尝试过的每一种方法都面临的问题是 "reverse" 匹配过程。找到匹配的文件还可以,但过滤坏文件对我来说似乎是不可能的。
让我们移动除重要文件之外的所有文件,如您所述:
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)));
}
我有一个 string
数组,其中包含我想保存在文件夹中的所有“重要文件”名称。该文件夹包含 "spam.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
我尝试过的每一种方法都面临的问题是 "reverse" 匹配过程。找到匹配的文件还可以,但过滤坏文件对我来说似乎是不可能的。
让我们移动除重要文件之外的所有文件,如您所述:
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)));
}