代码之家  ›  专栏  ›  技术社区  ›  WernerCD

合并两个(或更多)文件信息列表…

  •  1
  • WernerCD  · 技术社区  · 14 年前

    我有类似的东西:

    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,join。。。似乎什么都没用。我看到的大部分是添加两个列表,数组。

    3 回复  |  直到 12 年前
        1
  •  7
  •   Jon Skeet    14 年前

    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();
    

        2
  •  3
  •   SLaks    14 年前

    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());
    
        3
  •  -1
  •   Jos Clarisse    7 年前

    我的解决方案:

    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;
        }