从目录中选择随机文件

问题描述 投票:14回答:7

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

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

谢谢。

c# .net file random
7个回答
27
投票

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

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

10
投票

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

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

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

看到这篇文章关于如何display random pictures in a way users will like


6
投票

select random file from directory

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;
    }

4
投票
var files = new DirectoryInfo(@"C:\dev").GetFiles();
int index = new Random().Next(0, files.Length);

Console.WriteLine(files[index].Name);

1
投票

为什么不呢:

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

1
投票

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


0
投票

只是我的5美分,mvc操作的代码,使用cookie,所以我们不重复相同的文件名两次:

        [AllowAnonymous]
        //-------------------------------------------------------------
        public async Task<ActionResult> RandomBackground()
        //-------------------------------------------------------------
        {
            var basePath = "~/Content/images/backgrounds";
            var dir = System.Web.Hosting.HostingEnvironment.MapPath(basePath);

            var rand = new Random();
            var files = System.IO.Directory.GetFiles(dir, "*.jpg");
            if (files!=null)
            {
                var cookie = "Background";
                var pickedFile = "";
                var fileName = "";
                var oldFilename = "";
                while ((oldFilename == fileName) && files.Count<string>()>1)
                {
                    oldFilename = ReadControllerCookie(cookie);
                    pickedFile = files[rand.Next(files.Length)];
                    fileName = System.IO.Path.GetFileName(pickedFile);
                }
                SaveControllerCookie(cookie, fileName);
                return Content(fileName);
            }
            return new EmptyResult();
        }

用作:

<img src="~/Content/images/backgrounds/@Html.Action("RandomBackground", "YourControllerName")">
© www.soinside.com 2019 - 2024. All rights reserved.