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

すべてのファイル名を 1 つの FileInfo リストにまとめて取得したいと考えています。解析がずっと簡単になります。Concat、AddRange、join...何も機能していないようです。私が見るもののほとんどは、2 つのリスト、配列を追加するためのものです。

4

3 に答える 3

7

まあ、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();

ちなみに、逐語的な文字列リテラルは逐語的である必要はありません。エスケープが必要なものは何も含まれていません。

于 2010-09-27T20:17:42.973 に答える
3

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());
于 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 に答える