嗨,我是一个c#begginer,我想做一个简单的程序,它将通过一个文件夹计算有多少文件是.mp3文件,有多少是.flac。
像我说的那样,程序非常基础。它将询问音乐文件夹路径,然后将通过它。我知道主音乐文件夹中会有很多子文件夹,所以它必须在当时打开它们并通过它们。E.g
C:/音乐/ 将是给定的目录。 但它本身并不包含任何音乐。 要获取音乐文件,程序必须打开像
这样的子文件夹C:/音乐/电子/ deadmau5 / RandomAlbumTitle / 只有这样他才能计算.mp3文件和.flac文件并将它们存储在两个独立的计数器中。 该程序必须为至少2000个文件夹执行此操作。
您是否知道一种通过文件并返回其名称(和扩展名)的好方法或方法?
答案 0 :(得分:7)
您可以使用System.IO.DirectoryInfo
。 DirectoryInfo
提供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);
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