2016-08-02 33 views
-3

以下のコードのwhere句にエラーが表示されます。エラー状態:'System.IO.FileInfo'タイプを暗黙的に 'System.IO.FileInfo []に変換できません。

は、暗黙のうちに私は何を達成しようとしていることですべてのファイルを取得することですSystem.IO.FileInfo []

」にタイプ「System.IO.FileInfo」を変換できません。特定の日付の後または間にディレクトリ。次に、各ファイルをループして、ファイルに関する情報を取得する必要があります。

DirectoryInfo info = new DirectoryInfo(dirtxt.Text); 
FileInfo[] fls = info.GetFiles() 
        .Where(file => file.LastWriteTime >= DateTime.Now) 
        .First(); 

foreach (FileInfo fi in fls) 
{ 
    //Collect file information here 
} 

答えて

3

あなたはので、これがあるべきFirst()を使用している:First()

FileInfo[] fls = info.GetFiles() 
        .Where(file => file.LastWriteTime >= DateTime.Now).ToArray(); 

や私の好ましい方法の種類を指定し、IEnumerable

var fls = info.GetFiles().Where(file => file.LastWriteTime >= DateTime.Now); 
を使用いけないを使用して

FileInfo fls = info.GetFiles() 
       .Where(file => file.LastWriteTime >= DateTime.Now).First(); 

またはアウトと

+1

'First()'は述語を受け入れることができるので、 'Where'節なしで使うことができます:' FileInfo fls = info.GetFiles()。First(file => file.LastWriteTime> = DateTime.Now); ' –

1

First()を1回の選択に使用していますが、間違った配列に挿入しようとしています。クエリを配列またはリストまたは反復のためのIEnumerableにしてみてください。

FileInfo[] fls = info.GetFiles() 
    .Where(file=>file.LastWriteTime >= DateTime.Now).ToArray(); 

または

List<FileInfo> fls = info.GetFiles() 
    .Where(file=>file.LastWriteTime >= DateTime.Now).ToList(); 

または

IEnumerable<FileInfo> fls = info.GetFiles() 
    .Where(file=>file.LastWriteTime >= DateTime.Now).AsEnumerable(); 
1

ファースト()関数を使用しています。これは、Where句に一致する最初のFileInfoのみを返します。

.First()を削除して、大量のデータを取得します。

0

エラーはFirst()を使用しているため、単一の項目のみを返します(見つからない場合は例外をスローします)。あなたは、単にそれを削除することができます

var fls = info.GetFiles() 
    .Where(file=>file.LastWriteTime >= DateTime.Now); 

foreach (FileInfo fi in fls) 
//.... 

あなたはforeachループでコレクションを反復処理しようとしているとして、バックリストの配列を取得する必要はありません。

関連する問題