【问题标题】:Getting Random File from Directory Tree从目录树中获取随机文件
【发布时间】:2012-06-30 14:12:36
【问题描述】:

所以我似乎无法在任何地方找到一个很好的例子。我从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;
}

【问题讨论】:

    标签: c# linq directory-tree


    【解决方案1】:

    试试这个

    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)];
    

    【讨论】:

    • 这个人非常容易,很高兴我问他正在制作递归混乱。谢谢!
    • 很高兴为您提供帮助。我总是尝试使用 Directory / File 而不是 DirectoryInfo / FileInfo 来解决。
    • +1,这也是最快的。我试过 Directory.EnumerateFiles(path, pattern, SearchOption.AllDirectories).Skip(random.Next(0, fileCount).First() 但显然 .NET 上找到 fileCount 的唯一方法是计算 GetFiles 结果:)
    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2017-12-24
    • 2010-10-05
    相关资源
    最近更新 更多