teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

追記③

2018/07/21 08:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -56,4 +56,54 @@
56
56
  これはエラーが出てしまうから無理なのでしょうか?
57
57
  不思議なのは、longfile.ElementAt(0)~longfile.ElementAt(3)をコメントアウトして、
58
58
  long dirsize = GetDirectorySize(new DirectoryInfo(@"C:\〇〇\〇〇"));
59
- のコードだけならば、例のフォルダを指定してもエラーにならない所です。
59
+ のコードだけならば、例のフォルダを指定してもエラーにならない所です。
60
+
61
+ ### 追記②
62
+
63
+ papinianus様のご指示に従って、設計を変えてみましたが、
64
+ filelist.OrderByDescending(s => s.FullName.Length).Take(3);
65
+ のコードで赤線が付いてエラーになります。
66
+ ご教示のほどお願い致します。
67
+
68
+ ```C#
69
+ private void Form1_Load(object sender, EventArgs e)
70
+ {
71
+ Console.WriteLine("test");
72
+ //long dirsize = GetDirectorySize(di);
73
+ List<FileInfo> filelist = MyDirectoryInfo(@"C:\Users\〇〇\Desktop\My Documents");
74
+
75
+        //下記でエラーになります。長いパス名ベスト3を取得したいです。
76
+ IOrderedEnumerable<string> longlist = filelist.OrderByDescending(s => s.FullName.Length).Take(3);
77
+ }
78
+
79
+ public static List<FileInfo> MyDirectoryInfo(string dirpath)
80
+ {
81
+ DirectoryInfo di = new DirectoryInfo(dirpath);
82
+ List<FileInfo> filelist = new List<FileInfo>();
83
+ GetDirectoryInfo(di, ref filelist);
84
+ return filelist;
85
+ }
86
+
87
+ public static void GetDirectoryInfo(DirectoryInfo dirInfo, ref List<FileInfo> list)
88
+ {
89
+ //long size = 0;
90
+
91
+ //フォルダ内の全ファイルの合計サイズを計算する。
92
+ foreach (FileInfo fi in dirInfo.GetFiles())
93
+ {
94
+ list.Add(fi);
95
+ //size += fi.Length;
96
+ //longfile = ((longfile.Concat(new[] { fi.FullName })).OrderByDescending(s => s.Length)).Take(3);
97
+ }
98
+
99
+ //サブフォルダのサイズを合計していく。
100
+ foreach (DirectoryInfo di in dirInfo.GetDirectories())
101
+ {
102
+ GetDirectoryInfo(di, ref list);
103
+ //size += GetDirectorySize(di);
104
+ }
105
+
106
+ //結果を返す
107
+ //return size;
108
+ }
109
+ ```

2

追記

2018/07/21 08:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -45,4 +45,15 @@
45
45
  //結果を返す
46
46
  return size;
47
47
  }
48
- ```
48
+ ```
49
+ ### 追記
50
+
51
+ フォルダを指定してエラーが出た件ですが、なんとなく原因がわかりました。
52
+ そのフォルダのパス名を短くしたら、表示される容量が変わったので、
53
+ そのフォルダ内に長すぎるファイルやパスがあるのが原因だと思います。
54
+
55
+ このような長いパスを知る為に、longfile.ElementAt(0)~longfile.ElementAt(3)で出力したかったのですが、
56
+ これはエラーが出てしまうから無理なのでしょうか?
57
+ 不思議なのは、longfile.ElementAt(0)~longfile.ElementAt(3)をコメントアウトして、
58
+ long dirsize = GetDirectorySize(new DirectoryInfo(@"C:\〇〇\〇〇"));
59
+ のコードだけならば、例のフォルダを指定してもエラーにならない所です。

1

タグ変更

2018/07/21 05:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes