2012-03-13 3 views
0

Например. У меня есть папка «MyFolder» И я хочу получить размер всех файлов, что имя файла «*D.*»Как получить размер набора определенных файлов?

Есть ли простой способ сделать это?

(P.S. Я знаю всю папку, я могу использовать TotalSize(), чтобы получить свой размер, но как насчет моих ограничений?)

+0

Можете уточнить? В папке с заданным именем не может быть более одного файла, поэтому я предполагаю, что вы имеете в виду, что имя соответствует некоторому шаблону. –

+1

Всегда говорите, какую версию .NET вы используете. –

+1

@AdamRobinson: он не процитировал его '*'. Посмотри снова. –

ответ

6

Есть ли простой способ сделать это?

Да, есть. Одна строка кода на самом деле:

using System; 
using System.IO; 
using System.Linq; 

class Program 
{ 
    static void Main() 
    { 
     long size = Directory 
      .EnumerateFiles(@"c:\work", "*d.*") 
      .Select(x => new FileInfo(x)) 
      .Sum(x => x.Length); 
     Console.WriteLine(@"The size of files in c:\work\*d.* is {0} bytes", size); 
    } 
} 

И если вы ориентируетесь на версию .NET до .NET 4.0, где метод EnumerateFiles не доступен, вы можете использовать метод GetFiles вместо этого.

+0

Вы можете использовать перегрузку EnumerateFiles, которая принимает шаблон, чтобы удалить необходимость в .Where (...) '. – Weeble

+0

Да, это уже сделано. –

+0

Я думаю, что шаблон в вопросе, возможно, был изменен с момента его чтения - он имеет две подстановочные знаки и период в нем. Тем не менее, +1. – Weeble

1

Не думайте, что есть простой способ создать сумму самостоятельно. Существуют различные подходы, например:

DirectoryInfo mydir = new DirectoryInfo(); 
long size = 0; 
foreach(FileInfo file in mydir.GetFiles("D*")) 
    size += file.Length(); 
+0

Directory.GetFiles возвращает строку [] type –

+0

Нет, она возвращает 'FileInfo []' (http://msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx) Обратите внимание, что я 'с использованием 'DirectoryInfo', а не' Directory'. – Mario

Смежные вопросы