2012-04-18 10 views
1

画像がすでにlbl_Diasにあるかどうかを確認する方法が必要です。画像を追加しない場合は、次の画像に移動します。既存のファイルを確認する

これは、無作為の順序であるが、非公開ではない画像のリストを作成するためのものです。あなたがファイルをチェックしているコードがないので、私は君たちを助けることを願って私はこれまでのところ、この

protected void DiasShow() 
    { 
     string[] getFiles = Directory.GetFiles(HttpContext.Current.Server.MapPath("/CSS/Design/Page_Design/Dias/1920x1080/")); 

     for (int i = 0; i <= GetFiles.Length; i++) 
     { 
      Random FindRandom = new Random(); 
      string RandomFileName = getFiles[FindRandom.Next(getFiles.Length)]; 

      FileInfo ImageName = new FileInfo(RandomFileName); 
      string FileType = ImageName.Name.Substring(ImageName.Name.Length - 4); 

      if ((FileType.ToUpper() == ".JPG") || (FileType.ToUpper() == "JPEG")) 
      { 
       lbl_Dias.Text += "<img src=\"CSS/Design/Page_Design/Dias/1920x1080/" + ImageName.Name + "\" />"; 
      } 
     } 
    } 

でしまった

、私は私は、ちょっと株式^^

+0

なぜファイルがランダムに見つかるのですか? – OmegaMan

+0

私はいつも同じ順序で写真を望んでいないので、 –

+0

はっきりしない、あなたはファイルをチェックしていますか? –

答えて

1

としてラベルに追加する前にそれをチェック:

protected void DiasShow()  
{ 
    var getFiles = Directory.GetFiles(HttpContext.Current.Server.MapPath("/CSS/Design/Page_Design/Dias/1920x1080/")); //Find alle filer I en mappe  

    var random = RandomiseList(getFiles); 

    var txt = new StringBuilder(); 
    foreach (var randomFileName in random) 
    { 
     var fileType = System.IO.Path.GetExtension(randomFileName).ToUpper(); 

     if ((fileType == ".JPG") || (fileType == ".JPEG")) 
     { 
      var imageName = System.IO.Path.GetFileName(randomFileName); 
      txt.Append("<img src=\"CSS/Design/Page_Design/Dias/1920x1080/" + imageName+ "\" />"); 
     } 
    } 
    lbl_Dias.Text += txt.ToString(); 
} 

public static T[] RandomiseList<T>(T[] source) 
{ 
    var rand = new Random(); //no need for own seed 
    var list = new List<T>(source); //copy to a new list which we can remove from 
    var result = new T[source.Length]; 
    for (int i = 0; i < source.Length; i++) 
    { 
     var listIndex = rand.Next(list.Count()); 
     result[i]= list[listIndex]; 
     list.RemoveAt(listIndex); 
    } 
    return result; 
} 
+0

StringBuilderにSystem.somethingを使用していますか? –

+0

@MichaelTotKorsgaard 'System.Text.StringBuilder'です。ファイルの先頭に' using System.Text; 'を置くこともできます。そのような不明なアイテムがマウスの上にマウスを置くと、ビジュアルスタジオがそれを修正するのに役立つことがあります。 – weston

+0

GetFilesWithoutExtensionの代わりに、GetFileNameを使用してファイルの種類を取得する方がよいでしょうか? –

0

よファイル名を確認しているとします。

使用Contains()Regexは、lbl_Diasからテキストを抽出した後に一致します。

0

ファイル名のリストを作成できます。

ファイル名を割り当てるたびに、リストに含まれているかどうかをチェックし、リストに追加しない場合は、別のファイルを探します。何かを確認するために

0

はあなたのラベルのテキストではなく、対応する辞書を持っていると私はあなただけのランダムな順序でファイルを一覧表示したいと推定など

Dictionary<string, int> _filenames = new Dictionary<string,int>(); 

.... 

if (_filenames.ContainsKey(ImageName.Name) == false) 
{ 
    _filenames.Add(ImageName.Name, 0); 

    lbl_Dias.Text += "<img src=\"CSS/Design/Page_Design/Dias/1920x1080/" + ImageName.Name + "\" />"; 

} 
3

まず、NumberOfImagesを削除してください。無意味です。 foreach-loop全体は、必要のないコレクションを反復しているので、恐ろしいことです。

第二に、あなたはファイルの拡張子文字列をチェックするためのFileInfoの拡張プロパティを使用することはできません - サブへの必要性を、など

第三に、まさにあなたはここでやろうとしていますか?

コレクションの使用済みイメージを削除していないため、ループの最後にランダムな重複が発生する可能性が高いことに気付くでしょう。

最後に、ファイルが存在するかどうかを確認する必要はありません。存在するファイルを返す関数から取得しているためです。

protected void DiasShow() 
{ 
    var mapPath = HttpContext.Current.Server.MapPath("/CSS/Design/Page_Design/Dias/1920x1080/"); 

    var images = 
     Directory.GetFiles(mapPath).Select(
      file => new FileInfo(file)).Where(fi => 
       fi.Extension.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) || 
       fi.Extension.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase)).ToList(); 

    var rand = new Random(); 

    while (images.Count > 0) 
    { 
     var i = rand.Next(images.Count); 
     lbl_Dias.Text += "<img src=\"CSS/Design/Page_Design/Dias/1920x1080/" + images[i].Name + "\"/>"; 
     images.RemoveAt(i); 
    } 
} 
関連する問題