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 + "\" />";
            }
        }
    }

私はあなたたちが助けてくれることを願っています、私はちょっと在庫です^^

4

5 に答える 5

3

まず第一に、それは無意味なので、NumberOfImagesを取り除きます。不要な場所でコレクションを反復処理しているため、foreachループ全体がひどいものになります。

次に、FileInfoのExtensionプロパティを使用して、ファイルの拡張子文字列を確認できます。サブ文字列などは必要ありません。

第三に、あなたはここで正確に何をしようとしていますか?

コレクションから使用済みの画像を削除していないため、ループの最後でランダムに重複する可能性があることに気づきます。

結局、存在するファイルを返す関数からファイルを取得したので、ファイルが存在するかどうかを確認する必要はまったくありません。

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);
    }
}
于 2012-04-18T13:42:05.357 に答える
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;
 }
于 2012-04-18T13:40:58.350 に答える
0

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

ファイル名を割り当てるたびに、そのファイル名がリストにあるかどうかを確認します。ファイル名がリストに追加されていない場合は、別のファイルを探します。

于 2012-04-18T13:29:24.837 に答える
0

ファイルをチェックするコードがないので、ファイル名をチェックしていると思います。

lbl_Diasからテキストを抽出した後、Contains()または正規表現の一致を使用します。

于 2012-04-18T13:25:30.940 に答える
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 + "\" />"; 

}
于 2012-04-18T13:33:01.920 に答える