前提・実現したいこと
取得したFileInfoのリストについて次の2つを実装したいのですが、
1つはエラーになり、もう1つは書き方がわかりません。
ご教示お願いします。
・ファイル名の長いパスの上位3つを取得。
(こちらコードに書きましたがエラーになります)
・リストの中のファイルサイズの合計を取得。
(こちらはコードが思いつきませんでした。)
該当のソースコード
C#
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 List<FileInfo> filelist = new List<FileInfo>(); 4 DirectoryInfo di = new DirectoryInfo(@"C:\Users\username\Desktop\testfolder"); 5 6 foreach (FileInfo fi in di.GetFiles()) 7 { 8 filelist.Add(fi); 9 } 10 //ここでエラー。 11 List<FileInfo>longlist = filelist.OrderByDescending(s => s.FullName.Length).Take(3); 12 13 //fileの中のファイルサイズの合計取得はLinqでどのように書けばよいですか? 14 //ファイルサイズはfi.Lengthのように、Lengthで取得可能のようです。 15 16 }
追記
エラーメッセージ(間違えてたので書き直しました。)
エラーCS0266型'System.Collections.Generic.IEnumerable<System.IO.FileInfo>' を 'System.Collections.Generic.List<System.IO.FileInfo>' に暗黙的に変換できません。 明示的な変換が存在します (キャストが不足していないかどうかを確認してください)
下記で解消されました。
IEnumerable<FileInfo> longlist = filelist.OrderByDescending(s => s.FullName.Length).Take(3);
環境
Windows 10, Visual Studio 2017,
自分の開発環境(OS, .NET, Visual Studio のバージョンなど) も書くようにしましょう。
エラーが出ているなら、エラーメッセージをコピペして書くようにしましょう。
ご指摘ありがとうございます。エラーメッセージに気づきませんでした。エラーメッセージから修正できました。
質問に追記していていただいたエラーメッセージは間違ってませんか? 「'System.Collections.Generic.IEnumerable<System.IO.FileInfo>' を 'System.Collections.Generic.List<System.IO.FileInfo>' に暗黙的に変換できません。」になるはず。解決策としては右辺に ToList() を付与すれば良いはずです。
回答2件
あなたの回答
tips
プレビュー