2012-02-26 44 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