2011-01-28 18 views
-1

即時通訊工作在一個網站上。有一個文件夾,.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

你能以什麼方式它不工作描述?例外?結果中沒有顯示的被忽視文件? – 2011-01-28 15:33:56

+0

你有什麼異常?如果是這樣,什麼? – 2011-01-28 15:35:28

回答

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通話,並使用LINQ Where延伸,而不是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

作爲一般性建議,請將擴展方法分解爲單獨的行,以便您可以通過該問題進行調試。一旦發現爆炸線,你就有更好的機會糾正錯誤,而不是一連串的擴展方法和lambda表達式。

注意:LINQ可能很難調試,因爲它使用延遲執行,因此您會在調試時看到它引發上下文切換。但是,如果您將這些位分開,則可以隔離問題區域。