質問編集履歴

3

追記③

2018/07/21 08:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -115,3 +115,103 @@
115
115
  long dirsize = GetDirectorySize(new DirectoryInfo(@"C:\〇〇\〇〇"));
116
116
 
117
117
  のコードだけならば、例のフォルダを指定してもエラーにならない所です。
118
+
119
+
120
+
121
+ ### 追記②
122
+
123
+
124
+
125
+ papinianus様のご指示に従って、設計を変えてみましたが、
126
+
127
+ filelist.OrderByDescending(s => s.FullName.Length).Take(3);
128
+
129
+ のコードで赤線が付いてエラーになります。
130
+
131
+ ご教示のほどお願い致します。
132
+
133
+
134
+
135
+ ```C#
136
+
137
+ private void Form1_Load(object sender, EventArgs e)
138
+
139
+ {
140
+
141
+ Console.WriteLine("test");
142
+
143
+ //long dirsize = GetDirectorySize(di);
144
+
145
+ List<FileInfo> filelist = MyDirectoryInfo(@"C:\Users\〇〇\Desktop\My Documents");
146
+
147
+
148
+
149
+        //下記でエラーになります。長いパス名ベスト3を取得したいです。
150
+
151
+ IOrderedEnumerable<string> longlist = filelist.OrderByDescending(s => s.FullName.Length).Take(3);
152
+
153
+ }
154
+
155
+
156
+
157
+ public static List<FileInfo> MyDirectoryInfo(string dirpath)
158
+
159
+ {
160
+
161
+ DirectoryInfo di = new DirectoryInfo(dirpath);
162
+
163
+ List<FileInfo> filelist = new List<FileInfo>();
164
+
165
+ GetDirectoryInfo(di, ref filelist);
166
+
167
+ return filelist;
168
+
169
+ }
170
+
171
+
172
+
173
+ public static void GetDirectoryInfo(DirectoryInfo dirInfo, ref List<FileInfo> list)
174
+
175
+ {
176
+
177
+ //long size = 0;
178
+
179
+
180
+
181
+ //フォルダ内の全ファイルの合計サイズを計算する。
182
+
183
+ foreach (FileInfo fi in dirInfo.GetFiles())
184
+
185
+ {
186
+
187
+ list.Add(fi);
188
+
189
+ //size += fi.Length;
190
+
191
+ //longfile = ((longfile.Concat(new[] { fi.FullName })).OrderByDescending(s => s.Length)).Take(3);
192
+
193
+ }
194
+
195
+
196
+
197
+ //サブフォルダのサイズを合計していく。
198
+
199
+ foreach (DirectoryInfo di in dirInfo.GetDirectories())
200
+
201
+ {
202
+
203
+ GetDirectoryInfo(di, ref list);
204
+
205
+ //size += GetDirectorySize(di);
206
+
207
+ }
208
+
209
+
210
+
211
+ //結果を返す
212
+
213
+ //return size;
214
+
215
+ }
216
+
217
+ ```

2

追記

2018/07/21 08:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,25 @@
93
93
  }
94
94
 
95
95
  ```
96
+
97
+ ### 追記
98
+
99
+
100
+
101
+ フォルダを指定してエラーが出た件ですが、なんとなく原因がわかりました。
102
+
103
+ そのフォルダのパス名を短くしたら、表示される容量が変わったので、
104
+
105
+ そのフォルダ内に長すぎるファイルやパスがあるのが原因だと思います。
106
+
107
+
108
+
109
+ このような長いパスを知る為に、longfile.ElementAt(0)~longfile.ElementAt(3)で出力したかったのですが、
110
+
111
+ これはエラーが出てしまうから無理なのでしょうか?
112
+
113
+ 不思議なのは、longfile.ElementAt(0)~longfile.ElementAt(3)をコメントアウトして、
114
+
115
+ long dirsize = GetDirectorySize(new DirectoryInfo(@"C:\〇〇\〇〇"));
116
+
117
+ のコードだけならば、例のフォルダを指定してもエラーにならない所です。

1

タグ変更

2018/07/21 05:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes