2009-04-13 17 views
11

私はいくつかの例を見たことがありますが、これまでのところC#では何も見ていませんが、ディレクトリの下でランダムなファイルを選択する最良の方法は何ですか?ディレクトリから任意のファイルを選択

このような場合、15分ごとに「C:\ wallpapers」から壁紙を選択します。

ありがとうございました。

答えて

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

例外をキャッチして、それを黙って無視するのは悪いです。あなたは例外を処理して何か有用なものを返すか、まったくそれを捕まえてはいけません。 – Guffa

24

アレイ内のすべてのファイルを取得してから1ランダムに取得

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

私はこのコードスニペットとその作業罰金を試みたが、それだけで、フォルダの壁紙での検索や壁紙の内側に任意のサブフォルダを検索されていません。それを行うコードを変更する方法は? – ankitG

+1

SearchOption.AllDirectoriesをGetFilesメソッドの3番目の引数として渡すことを検討してください。 – Mouk

0

理由だけではない:

  1. は配列にファイルを取得
  2. 番号を選択するために、ランダムクラスを使用しています0とファイルの間でランダムです。長さ
  3. 乱数をインデックスとして使用してファイルを取得します。
3
var files = new DirectoryInfo(@"C:\dev").GetFiles(); 
int index = new Random().Next(0, files.Length); 

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

Directory.GetFiles(...)を使用して、ファイル名の配列を取得し、Randomクラスを使用してランダムファイルを選択します。

9

壁紙の場合は、ランダムに表示されないため、ランダムに選択する必要はありません。

同じものを3回連続して選ぶとどうなりますか?または2つの間で交替する?

これは「ランダム」ですが、ユーザーは好きではありません。

方法についてのこの記事を参照してください。display random pictures in a way users will like

+0

シャッフル時には、ファイルが削除されたり、ディレクトリに追加された場合も考慮する必要があります(その場合は、再シャッフルする必要があります)。 – Joey

+0

偉大な点、それを追加していただきありがとうございます。 –

関連する問題