从c#中的文件夹中获取文件

时间:2011-01-28 15:30:34

标签: file c#-4.0 directory

我在网站上工作。里面有一个文件夹和.jpeg文件,我需要获取这些文件,但我的代码在这里不起作用是我的代码:

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:我尝试过目录和路径类,它们也不起作用。 我哪里错了。

2 个答案:

答案 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);

答案 1 :(得分:0)

作为一般建议,将扩展方法分解为单独的行,以便您可以调试问题。一旦找到爆炸线,你就有可能修复错误,而不是扩展方法和lambdas链。

注意:LINQ可能很难调试,因为它使用延迟执行,因此您可以看到它在调试时抛出上下文切换。但是,如果您将这些位分开,则可以隔离问题区域。