2012-03-13 4 views
0

たとえば、私はフォルダ "MyFolder"を持っています そして、ファイル名が "*D.*"であるすべてのファイルのサイズを取得したい特定のファイルのセットのサイズを取得するには?

これを行う簡単な方法はありますか?

(私はフォルダ全体のために知ってP.S.が、私はそのサイズを取得するために)(TotalSizeを使用することができますが、どのように私の制約とは?)

+0

明確にすることはできますか?ある名前のフォルダ内には複数のファイルが存在することはできませんので、その名前が何らかのパターンと一致していると仮定しています。 –

+1

あなたが使用している.NETのバージョンについては、常に言ってください。 –

+1

@AdamRobinson:彼は彼の '*'を引用しなかった。もう一度見てください。 –

答えて

6

これを行う簡単な方法はありますか?

はい、あります。実際には単一のコード行:EnumerateFiles方法が利用できない場合、あなたが前に.NET 4.0に.NETのバージョンをターゲットにしている場合

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); 
    } 
} 

は、そして、あなたは代わりにGetFilesメソッドを使用することができます。

+0

'.Where(...)'の必要性を取り除くパターンを取るEnumerateFilesのオーバーロードを使うことができます。 – Weeble

+0

はい、これは既に行われています。 –

+0

あなたがそれを読んだので質問のパターンが変わったかもしれないと思う - それには2つのワイルドカードとピリオドがある。それにもかかわらず、+1。 – Weeble

1

自分で合計を作成する方法は簡単だとは思わないでください。さまざまなアプローチがあります。例:

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

Directory.GetFilesは文字列[]を返します。 –

+0

いいえ、 'FileInfo []'を返します(http://msdn.microsoft.com/en-us/library/8he88b63(v=vs.110).aspx) 'Directory'ではなく' DirectoryInfo'を使っています。 – Mario

関連する問題