计算文件扩展名C#

时间:2012-02-26 18:43:45

标签: c# directory

嗨,我是一个c#begginer,我想做一个简单的程序,它将通过一个文件夹计算有多少文件是.mp3文件,有多少是.flac。

像我说的那样,程序非常基础。它将询问音乐文件夹路径,然后将通过它。我知道主音乐文件夹中会有很多子文件夹,所以它必须在当时打开它们并通过它们。

E.g

C:/音乐/ 将是给定的目录。 但它本身并不包含任何音乐。 要获取音乐文件,程序必须打开像

这样的子文件夹

C:/音乐/电子/ deadmau5 / RandomAlbumTitle / 只有这样他才能计算.mp3文件和.flac文件并将它们存储在两个独立的计数器中。 该程序必须为至少2000个文件夹执行此操作。

您是否知道一种通过文件并返回其名称(和扩展名)的好方法或方法?

7 个答案:

答案 0 :(得分: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;

答案 1 :(得分:6)

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

答案 2 :(得分:2)

C#具有在所有子目录中搜索文件的内置方法。确保为System.IO添加using语句

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

由于你是初学者,你应该暂时停止使用更灵活的LINQ方法。

答案 3 :(得分:0)

重复问题How to read File names recursively from subfolder using LINQ

Jon Skeet用

回答

您不需要使用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在递归方面并不是很好。您可能想要编写自己的通用递归扩展方法。考虑到问这种问题的频率,我应该在某个时候做到这一点......

答案 4 :(得分: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属性,看它是否与您关注的属性相匹配。

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

MSDN有很多信息和示例,例如如何遍历目录:http://msdn.microsoft.com/en-us/library/bb513869.aspx