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

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

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

Спасибо.

Ответ 1

выберите произвольный файл из каталога

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

  • получить файлы в массив
  • используйте класс Random для выбора числа, которое является случайным между 0 и файлами. Длина
  • Возьмите файл из массива, используя случайное число в качестве индекса

Ответ 6

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