2012-02-26 96 views
3

嗨,我是一個c#begginer,我想做一個簡單的程序,它將通過一個文件夾並計算有多少文件.mp3文件和多少.flac。計數文件擴展名C#

就像我說的程序是非常基本的。它會詢問音樂文件夾路徑,然後通過它。我知道這個主音樂文件夾中會有很多子文件夾,因此它們必須在當時打開它們並通過它們。

E.g

C:/音樂/ 是給定的目錄。 但它本身不包含任何音樂。 要進入音樂文件的程序必須打開子文件夾像

C:/音樂/電子/ deadmau5/RandomAlbumTitle/ 只有那麼他就可以算.mp3文件和文件.FLAC並將其存儲在兩個分開的計數器。 該程序將不得不爲至少2000個文件夾。

你知道一個好的方法或方法來通過文件並返回它的名稱(和擴展名)嗎?

+0

您使用的是.NET 4嗎? – sll 2012-02-26 18:47:14

+0

@sll是的,我使用的.NET 4 – phadaphunk 2012-02-26 18:48:53

回答

7

您可以使用System.IO.DirectoryInfoDirectoryInfo提供GetFiles方法,其中也有一個遞歸選項,所以如果你不擔心速度,你可以這樣做:

DirectoryInfo di = new DirectoryInfo(@"C:\Music"); 

int numMP3 = di.GetFiles("*.mp3", SearchOption.AllDirectories).Length; 
int numFLAC = di.GetFiles("*.flac", SearchOption.AllDirectories).Length; 
+0

忘記更改第二個搜索,仍然說* .mp3 – Dharun 2012-02-26 18:53:02

+0

這是意識到我仍然是一個begginer我真的不明白所有的答案。這就是說,我真的很喜歡這種方法,這正是我所期待的。 非常感謝 – phadaphunk 2012-02-26 18:55:27

+0

有沒有一種方法可以對單個GetFile的擴展進行計數? E.g int numFLAC = di.GetFiles(「* .flac」,「*。alac」,SearchOption.AllDirectories).Length; – phadaphunk 2012-02-26 19:13:01

0

重複的問題How to read File names recursively from subfolder using LINQ

喬恩斯基特回答那裏

你並不需要使用LINQ來做到這一點 - 這是built into the framework

string[] files = Directory.GetFiles(directory, "*.dll", 
            SearchOption.AllDirectories); 

if you're using .NET 4

IEnumerable<string> files = Directory.EnumerateFiles(directory, "*.dll", 
                SearchOption.AllDirectories); 

說實話,LINQ在遞歸方面不是很好。你可能想編寫自己的通用遞歸擴展方法。考慮到這類問題多久會被問到,我應該自己在一段時間內這麼做......

5

使用DirectoryInfo,並通過文件擴展名分組:

var di = new DirectoryInfo(@"C:/Music/"); 
var extensionCounts = di.EnumerateFiles("*.*", SearchOption.AllDirectories) 
         .GroupBy(x => x.Extension) 
         .Select(g => new { Extension = g.Key, Count = g.Count() }) 
         .ToList(); 

foreach (var group in extensionCounts) 
{ 
    Console.WriteLine("There are {0} files with extension {1}", group.Count, 
                   group.Extension); 
} 
1

C#有一個內置的方法來搜索所有子目錄中的文件。請確保您添加using語句System.IO

var path = "C:/Music/" 
var files = Directory.GetFiles(path, "*.mp3", SearchOption.AllDirectories); 
var count = files.Length; 

因爲你是你應該先在更靈活的LINQ方法,直到後來一個初學者。

0

這裏是MSDN支持頁面,How to recursively search directories by Visual C#

直接通過該頁面摘自:

void DirSearch(string sDir) 
{ 
    try 
    { 
     foreach (string d in Directory.GetDirectories(sDir)) 
     { 
     foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
     { 
      lstFilesFound.Items.Add(f); 
     } 
     DirSearch(d); 
     } 
    } 
    catch (System.Exception excpt) 
    { 
     Console.WriteLine(excpt.Message); 
    } 
} 

除了創建FileInfo對象外,您還可以使用此代碼。一旦你有文件信息對象,你可以檢查Extension屬性,看它是否與你關心的相匹配。

0
int fileCount = Directory.GetFiles(_Path, "*.*", SearchOption.TopDirectoryOnly).Length