从目录树获取随机文件

时间:2012-06-29 01:53:00

标签: c# linq directory-tree

所以我似乎无法在任何地方找到一个很好的例子。我从this从目录中选择随机文件的问题找​​到了一个很好的例子,但我需要从目录树(深度未知)中选择一个随机文件。这个代码从1个目录中获取一个随机文件,但我一直很困惑如何将它扩展到所有子目录,我相信你们其中一个LINQ大师可以帮我制作一些东西。

var extensions = new string[] { ".mp3" };
var di = new DirectoryInfo(MusicPath);
var rgFiles = di.GetFiles("*.*")
    .Where( f => extensions.Contains( f.Extension.ToLower() ));
int fileCount = rgFiles.Count();
if (fileCount > 0)
{
    int x = this.Generator.Next( 0, fileCount );  //Generator is 'Random' object
    file = rgFiles.ElementAt(x).FullName;
}

1 个答案:

答案 0 :(得分:4)

试试这个

var random = new Random(); // this should be placed in a static member variable, but is ok for this example
var fileNames = System.IO.Directory.GetFiles(@"c:\temp", "*.mp3", SearchOption.AllDirectories);
var randomFile = fileNames[random.Next(0, fileNames.Length)];