从目录中选择随机文件

我已经看过一些例子但到目前为止在C#中都没有,在目录下选择随机文件的最佳方法是什么?

在这种特殊情况下,我想每隔15分钟从“C:\ wallpapers”中选择一个壁纸。

谢谢。

获取数组中的所有文件,然后随机检索一个文件

var rand = new Random(); var files = Directory.GetFiles("c:\\wallpapers","*.jpg"); return files[rand.Next(files.Length)]; 

如果您正在为壁纸执行此操作,则不希望随意选择文件,因为它不会对用户显示为随机。

如果你连续三次选择同一个怎么办? 还是两个之间交替?

这是“随机的”,但用户并不喜欢它。

请参阅此文章,了解如何以用户喜欢的方式显示随机图片 。

从目录中选择随机文件

 private string getrandomfile2(string path) { string file = null; if (!string.IsNullOrEmpty(path)) { var extensions = new string[] { ".png", ".jpg", ".gif" }; try { var di = new DirectoryInfo(path); var rgFiles = di.GetFiles("*.*").Where( f => extensions.Contains( f.Extension.ToLower())); Random R = new Random(); file = rgFiles.ElementAt(R.Next(0,rgFiles.Count())).FullName; } // probably should only catch specific exceptions // throwable by the above methods. catch {} } return file; } 
 var files = new DirectoryInfo(@"C:\dev").GetFiles(); int index = new Random().Next(0, files.Length); Console.WriteLine(files[index].Name); 

为什么不呢:

  1. 将文件放入数组中
  2. 使用Random类选择0和files.Length之间随机的数字
  3. 使用随机数作为索引从数组中获取文件

使用Directory.GetFiles(...)获取文件名数组,并使用Random类选择随机文件。