2012-04-18 3 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

Используете ли вы System.something для StringBuilder? –

+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 ужасен, так как вы повторяете сборник, где он не нужен.

Во-вторых, вы можете использовать свойство расширения в 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); 
    } 
} 
Смежные вопросы