2009-04-13 54 views
11

Tôi đã xem một vài ví dụ nhưng không có gì cho đến nay trong C#, cách tốt nhất để chọn tệp ngẫu nhiên trong thư mục là gì?chọn tệp ngẫu nhiên từ thư mục

Trong trường hợp cụ thể này, tôi muốn chọn hình nền từ "C: \ wallpapers" cứ sau 15 phút.

Cảm ơn.

Trả lời

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

Ghi ngoại lệ và âm thầm bỏ qua chúng là xấu. Bạn nên xử lý ngoại lệ và trả về một cái gì đó hữu ích, hoặc không bắt được chúng. – Guffa

24

Nhận tất cả các file trong một mảng và sau đó lấy một cách ngẫu nhiên

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

tôi đã cố gắng đoạn mã này và làm việc tốt của nó nhưng nó chỉ là tìm kiếm trong các hình nền thư mục và không tìm kiếm bất kỳ thư mục con bên trong nền. Làm thế nào để sửa đổi mã để làm điều đó là tốt? – ankitG

+1

Cân nhắc chuyển SearchOption.AllDirectories làm đối số thứ ba cho phương thức GetFiles. – Mouk

0

tại sao không chỉ:

  1. có được các tập tin vào một mảng
  2. sử dụng lớp ngẫu nhiên để chọn một con số là ngẫu nhiên giữa 0 và tệp.Length
  3. Lấy tệp từ mảng bằng cách sử dụng số ngẫu nhiên làm chỉ mục
3
var files = new DirectoryInfo(@"C:\dev").GetFiles(); 
int index = new Random().Next(0, files.Length); 

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

Sử dụng Directory.GetFiles(...) để có được những mảng của tên tập tin và sử dụng lớp Random để chọn một tập tin ngẫu nhiên.

9

Nếu bạn đang làm điều này cho hình nền, bạn không muốn chỉ chọn một tệp ngẫu nhiên vì nó sẽ không xuất hiện ngẫu nhiên cho người dùng.

Điều gì sẽ xảy ra nếu bạn chọn cùng một ba lần liên tiếp? Hoặc thay thế giữa hai?

Đó là "ngẫu nhiên" nhưng người dùng không thích.

Xem bài đăng này về cách display random pictures in a way users will like.

+0

Khi xáo trộn bạn có lẽ cũng nên giải thích trường hợp tệp bị xóa hoặc được thêm vào thư mục (trong trường hợp này bạn cần trộn lại). – Joey

+0

Điểm tuyệt vời, cảm ơn bạn đã thêm điều đó. –

Các vấn đề liên quan