2009-04-13 10 views
11

Ich habe ein paar Beispiele gesehen, aber keine in C#, was ist der beste Weg, um eine zufällige Datei in einem Verzeichnis zu wählen?Wählen Sie eine zufällige Datei aus dem Verzeichnis

In diesem speziellen Fall möchte ich alle 15 Minuten ein Hintergrundbild von "C: \ wallpapers" auswählen.

Danke.

Antwort

4

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

Ausnahmen abfangen und ignorieren ist schlecht. Sie sollten entweder die Ausnahme behandeln und etwas Nützliches zurückgeben oder sie überhaupt nicht abfangen. – Guffa

24

Erhalten Sie alle Dateien in einem Array und rufen dann eine zufällig

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

habe ich versucht, diesen Code-Schnipsel und seine Arbeit gut, aber es ist nur in den Ordner Hintergrundbilder Suche und keine Unterordner innerhalb Tapeten suchen. Wie man den Code ändert, um das auch zu tun? – ankitG

+1

Überlegen Sie SearchOption.AllDirectories als drittes Argument für die GetFiles-Methode. – Mouk

0

warum nicht einfach:

  1. erhalten Sie die Dateien in ein Array
  2. die Random-Klasse verwenden, um eine Nummer zu wählen, ist zufällig zwischen 0 und files.Length
  3. Ergreifen Sie die Datei aus dem Array mit der Zufallszahl als Index
3
var files = new DirectoryInfo(@"C:\dev").GetFiles(); 
int index = new Random().Next(0, files.Length); 

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

die Directory.GetFiles(...) Verwenden Sie das Array von Dateinamen und verwenden Sie die Random Klasse auszuwählen, um eine zufällige Datei zu erhalten.

9

Wenn Sie dies für Hintergrundbilder tun, möchten Sie nicht einfach eine Datei zufällig auswählen, da sie für den Benutzer nicht zufällig erscheint.

Was ist, wenn Sie das gleiche dreimal hintereinander auswählen? Oder zwischen zwei wechseln?

Das ist "zufällig", aber die Benutzer mögen es nicht.

Siehe diesen Beitrag über wie zu display random pictures in a way users will like.

+0

Beim Shuffling sollten Sie wahrscheinlich auch den Fall berücksichtigen, dass eine Datei gelöscht oder dem Verzeichnis hinzugefügt wird (in diesem Fall müssen Sie sie neu mischen). – Joey

+0

Toller Punkt, vielen Dank für das hinzufügen. –

Verwandte Themen