Widziałem kilka przykładów, ale jak dotąd w C #, jaki jest najlepszy sposób na wybranie losowego pliku w katalogu?
W tym konkretnym przypadku chcę wybrać tapetę z „C: tapety” co 15 minut.
Dzięki.
Odpowiedzi:
25 dla odpowiedzi № 1Pobierz wszystkie pliki w tablicy, a następnie pobierz je losowo
var rand = new Random();
var files = Directory.GetFiles("c:\wallpapers","*.jpg");
return files[rand.Next(files.Length)];
9 dla odpowiedzi nr 2
Jeśli robisz to dla tapet, nie chcesz po prostu wybierać pliku losowo, ponieważ nie będzie on dla użytkownika losowy.
Co się stanie, jeśli wybierzesz to samo trzy razy z rzędu? Albo na przemian dwa?
To jest „losowe”, ale użytkownicy tego nie lubią.
Zobacz ten post o tym, jak wyświetlać losowe zdjęcia w sposób, jaki będą chcieli użytkownicy.
4 dla odpowiedzi nr 3
wybierz losowy plik z katalogu
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;
}
3 dla odpowiedzi № 4
var files = new DirectoryInfo(@"C:dev").GetFiles();
int index = new Random().Next(0, files.Length);
Console.WriteLine(files[index].Name);
0 dla odpowiedzi № 5
dlaczego nie tylko:
- pobierz pliki do tablicy
- użyj klasy Losowej, aby wybrać liczbę losową między 0 a files.Length
- Chwyć plik z tablicy za pomocą liczby losowej jako indeksu
0 dla odpowiedzi № 6
Użyj Directory.GetFiles(...)
aby uzyskać tablicę nazw plików i użyć Random
klasa, aby wybrać losowy plik.