В настоящее время я использую следующий фрагмент, чтобы просмотреть миллионы файлов в очень большом каталоге, а затем скопировать те, которые мне нужны, в другой рабочий каталог. sNos
- int[]
, который содержит целые числа. Я проверяю, содержит ли имя файла одно из этих целых чисел, если «Да», оно скопировано в мой локальный каталог.Как сравнить файлы при копировании их в другой каталог?
string[] allFiles = System.IO.Directory.GetFiles(@"C:\ExampleFolder");
foreach (string file in allFiles)
{
for (int i = 0; i < sNos.Count(); i++)
{
if (file.Contains(sNos[i].ToString()))
{
File.Copy(file, "C:\\newFolder\\" + file.Substring(file.Length - 25), true);
}
}
}
Теперь, чтобы быть конкретным .. имена файлов в формате XXXXXX_XX_XX_XX_XXX_XX
. X
обозначает целое число. Первые 6 чисел в имени файла - это то, что я пытаюсь сопоставить со значениями в моем массиве int. Проблема заключается в следующем, может быть файлы с такими именами, как:
123456_33_42_56_234_44 (Size: 1 MB)
123456_33_46_34_992_23 (Size: 2 MB)
Теперь, так как файлы будут соответствовать «123456» в моем целочисленный массив, как будут скопированы. Тем не менее, я хочу, чтобы файл большего размера копировался каждый раз, когда есть совпадение с несколькими файлами. Может быть совпадение с 2 файлами, может быть, 3 или даже больше. Как я могу это сделать? Любая помощь будет оценена!
Создайте словарь с int как ваши ключи и укажите фактический файл имени. Поэтому, если вы найдете совпадение, вы сравниваете размер файла и соответствующим образом заменяете. Затем вы переходите через словарь и скопируете файлы. –
Являются ли sNos всегда шестью цифрами? Или может быть более короткий ints там, которые ноль-padded в именах файлов? –
@JerryFederspiel Они всегда 6 цифр и не имеют нулевой пробел – sparta93