Думаю, вы довольно близки. Но, может быть, вам удастся добиться чего-то немного проще. Итак, вы задаете два вопроса.
Первый вопрос: нужно ли мне создавать новый класс для повторяющихся файлов? Честно говоря, кажется, что даже первый класс немного избыточен, поскольку используемый вами класс: System.IO.FileInfo
имеет все интересующие вас свойства (по крайней мере, так кажется). Так что нет, я так не думаю. Вы можете больше думать о классах как о способе структурирования ваших данных и возможного определяющего поведения. Если вам не нужно указывать c поведение или добавлять данные к уже существующему доступному классу, можно также использовать его. : -)
Второй вопрос: как лучше всего вернуть список всех найденных файлов-дубликатов? Думаю, это самый простой способ сделать то, что вы делаете, но я бы изменил тип данных «дубликатов» с List<string>
на List<FileInfo>
и вставил m туда, когда вы их найдете.
string[] files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);
var fileInfos = new List<FileInfo>();
foreach(var item in files)
{
var fileInfo = new FileInfo(item);
var doppelganger = fileInfos.FirstOrDefault(x => x.Name == fileInfo.Name);
if (doppelganger != null && duplicates.All(x => x.FullName != doppelganger.FullName))
duplicates.Add(doppelganger);
if(doppelganger != null)
duplicates.Add(fileInfo);
fileInfos.Add(fileInfo);
}
Итак, что я делаю, это повторно использую класс FileInfo в System.IO и помещаю их в список там, где это необходимо. Просто чтобы прояснить «двойника», если вы хотите, чтобы все двойники включали тот, с которым вы сравниваете, верно? Вот почему я также добавляю это. Может быть, это можно было бы сделать более элегантно, но, привет go.
Надеюсь, это поможет! Счастливое кодирование