1

我有类似的东西:

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 个列表、数组。

4

3 回答 3

7

好吧,Concat当然应该工作:

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

如果您需要数组或列表,请适当调用ToArrayToList

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

顺便说一句,您的逐字字符串文字不需要逐字 - 它不包含任何需要转义的内容。

于 2010-09-27T20:17:42.973 回答
3

你需要做一个List<FileInfo>,像这样:

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

如果你有DirectoryInfos 的集合,你可以调用SelectMany

IEnumerable<FileInfo> files = directories.SelectMany(d => d.GetFiles());
于 2010-09-27T20:17:45.390 回答
-1

我的解决方案:

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;
    }
于 2017-11-29T09:52:39.197 回答