2011-01-28 2 views
-1

im работает на веб-сайте. есть папка и .jpeg файлы внутри, мне нужно, чтобы получить эти файлы и, но мой код оленьей кожи работает вот мой код:получить файлы из папок в C#

DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/ysyp/Images/Products/")); 
List<FileInfo> fileList = ((FileInfo[])directoryInfo.GetFiles()) 
    .ToList<FileInfo>() 
    .FindAll(imageName => imageName.Name == productDetail.ProductCode); 

PS: Путь к папке правильно (. я не знаю, сколько проверка), но я не могу добраться до файлов .... PS2: я попробовал каталог и класс пути, они тоже не работают. где я ошибаюсь.

+0

Можете ли вы описать, каким образом это не работает? Исключения? Исправлены ли файлы в результате, которые там не отображаются? –

+0

Есть ли исключения? Если да, то? –

+0

fileinfolist count всегда 0. Я использовал каталог и классы пути перед каталогом, но результат тот же, но есть более одного изображения, но я не могу их достичь ... и нет никаких исключений –

ответ

1

Там может быть несколько причин:

  • Server.MapPath(@"/ysyp/Images/Products/") не указывает на каталог, вы думаете, это
  • imageName.Name == productDetail.ProductCode исполнят чувствительны к регистру Сравнение
  • image.Name возвращает имя файла включая расширение. Я думаю, ProductCode не включает это.

Похожие измененный код:

DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/ysyp/Images/Products/")); 
var fileList = (directoryInfo.GetFiles()) 
    .ToList() 
    .FindAll(imageName => string.Compare(imageName.Name, 
           productDetail.ProductCode + imageName.Extension, 
           StringComparison.OrdinalIgnoreCase) == 0); 

Это добавит расширение файла к коду продукта, а затем выполнить регистрозависимости сравнение, чтобы проверить, есть ли совпадение.

Как немного подправить вы можете удалить ToList вызов в середине и использовать Where LINQ расширение вместо FindAll:

DirectoryInfo directoryInfo = new DirectoryInfo(Server.MapPath(@"/ysyp/Images/Products/")); 
var fileList = directoryInfo.GetFiles() 
    .Where(imageName => string.Compare(imageName.Name, 
           productDetail.ProductCode + imageName.Extension, 
           StringComparison.OrdinalIgnoreCase) == 0); 
+0

thx fredrik. его imageName.name ... я имею в виду его меня, я должен посмотреть, содержит ли метод, не равный, жаль, что я трачу ваше время :) –

0

Как общее предложение, разделите методы расширения на отдельные строки, чтобы вы могли отлаживать проблему. Как только вы найдете линию, которая взрывается, у вас больше шансов исправить ошибку, чем цепочка методов расширения и лямбда.

ПРИМЕЧАНИЕ: LINQ может быть трудно отлаживать, поскольку он использует отложенное выполнение, поэтому вы видите, что он переключает контекстные переключатели при отладке. Но, если вы выделите биты, вы можете изолировать проблемную область.

Смежные вопросы