Объедините два (или более) списка FileInfo ... - PullRequest
1 голос
/ 28 сентября 2010

У меня есть что-то похожее на это:

var d1 = new DirectoryInfo(Path.Combine(source, @"bills_save." + dt));
var d2 = new DirectoryInfo(Path.Combine(source, @"reports_save." + dt));

var f1 = d1.GetFiles();
var f2 = d2.GetFiles();

Я хочу получить и объединить все имена файлов в один список FileInfo. Сделал бы мой анализ намного легче. Concat, AddRange, присоединяйтесь ... кажется, ничего не работает. Большая часть того, что я вижу, - это добавление 2 списков, массивов.

Ответы [ 3 ]

7 голосов
/ 28 сентября 2010

Ну, Concat определенно должно работать:

// f3 will be IEnumerable<FileInfo>
var f3 = f1.Concat(f2);

Если вам нужен массив или список, вызовите ToArray или ToList соответственно:

var list3 = f1.Concat(f2).ToList();
var array3 = f1.Concat(f2).ToArray();

ByКстати, ваш дословный строковый литерал не обязательно должен быть дословным - он не содержит ничего, что могло бы быть экранировано.

3 голосов
/ 28 сентября 2010

Вам нужно сделать List<FileInfo>, вот так:

List<FileInfo> files = new List<FileInfo>();
files.AddRange(d1.GetFiles());
files.AddRange(d2.GetFiles());

Если у вас есть коллекция DirectoryInfo с, вы можете позвонить SelectMany:

IEnumerable<FileInfo> files = directories.SelectMany(d => d.GetFiles());
0 голосов
/ 29 ноября 2017

Мое решение:

public static FileInfo[] GetFiles(DirectoryInfo dir, string searchPattern, SearchOption searchOption)
    {
        string[] searchPatterns = searchPattern.Split('|');
        FileInfo[] fileinfos=null;
        foreach (string sp in searchPatterns)
        {
            FileInfo[] newFiles = dir.GetFiles(sp, searchOption);
            if (fileinfos == null)
            {
                fileinfos = newFiles;
            }
            else
            {
                if (newFiles.Length > 0)
                {
                    fileinfos = (FileInfo[])fileinfos.Concat(newFiles).ToArray();
                }
            }
        }
        return fileinfos;
    }
...