我在网站上工作。里面有一个文件夹和.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:我尝试过目录和路径类,它们也不起作用。 我哪里错了。
答案 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可能很难调试,因为它使用延迟执行,因此您可以看到它在调试时抛出上下文切换。但是,如果您将这些位分开,则可以隔离问题区域。