выбрать случайный файл из каталога - PullRequest
14 голосов
/ 13 апреля 2009

Я видел несколько примеров, но пока ни одного в C #, как лучше выбрать случайный файл в каталоге?

В данном конкретном случае я хочу выбирать обои из «C: \ wallpapers» каждые 15 или около того минут.

Спасибо.

Ответы [ 7 ]

27 голосов
/ 13 апреля 2009

Получить все файлы в массиве, а затем получить один случайным образом

var rand = new Random();
var files = Directory.GetFiles("c:\\wallpapers","*.jpg");
return files[rand.Next(files.Length)];
10 голосов
/ 13 апреля 2009

Если вы делаете это для обоев, вы не хотите просто выбирать файл случайным образом, потому что он не будет казаться случайным для пользователя.

Что если вы выберете один и тот же три раза подряд? Или чередовать два?

Это "случайно", но пользователям это не нравится.

См. Этот пост о том, как отображать случайные изображения так, как пользователям понравится .

6 голосов
/ 16 апреля 2009

выберите случайный файл из каталога

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 голосов
/ 13 апреля 2009
var files = new DirectoryInfo(@"C:\dev").GetFiles();
int index = new Random().Next(0, files.Length);

Console.WriteLine(files[index].Name);
1 голос
/ 13 апреля 2009

Используйте Directory.GetFiles(...) для получения массива имен файлов и используйте класс Random для выбора случайного файла.

1 голос
/ 13 апреля 2009

почему не просто:

  1. получить файлы в массив
  2. используйте класс Random, чтобы выбрать случайное число между 0 и файлами. Длина
  3. Получить файл из массива, используя случайное число в качестве индекса
0 голосов
/ 07 апреля 2019

Только мои 5 центов, код для действия MVC, с использованием куки, чтобы мы не повторяли одно и то же имя файла дважды:

        [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")">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...