2010-11-22 75 views
1

的對象是文件夾,我有以下方法:C#如何檢查文件根據文件名

public static Boolean CheckContents(string ExportDirectory, string FileName, string DspFleName, String RteFleName, string FulRteName, string EqpFleName, int CompanyId, string CompanyName) 
    { 

     if (DspFleName != "None") 
     { 

      IList<string> DspFle= DspFleName.Split(','); 
      IList<string> ActualFiles = Directory.GetFiles(ExportDirectory); 
      for (int i = 0; i < DspFle.Count; i++) 
      { 
       if (DspFle[i] != ActualFiles[i]) 
       { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
} 

基本上就是這個代碼的意思做的就是從DspFle場被分隔的所有文件名由,。因此,這看起來就像這樣:

test.txt,test2.csv 

然後,它越來越是從「ExportDirectory」規定,並返回那些成一個IList

我有2個問題在這裏的目錄中acutal文件: 1 。Directory.GetFiles返回整個文件路徑,以便始終返回false。我也試過Path.GetFileNames,它只返回文件名,但不返回擴展名。

2.我需要將我的整個DspFle與我的ActualFile IList進行比較,因爲文件名可能位於列表的不同部分。

任何想法?

+1

我認爲你應該多放幾個參數:) – Diadistis 2010-11-22 19:27:40

+0

還有更多的方法,但我只是想結束它,所以它不會脫離問題的上下文 – user380432 2010-11-22 19:28:48

+1

在這種情況下,可能應該有減少到方法(即分解成更小的方法) – JohnFx 2010-11-22 19:49:09

回答

1

你的代碼期望不僅存在該文件,但要在相同的位置...

試試這個來代替:

public static Boolean CheckContents(string ExportDirectory, string DspFleName) 
    { 
     if (DspFleName == "None") 
      return true; 

     var DspFle = DspFleName.Split(','); 
     var ActualFiles = Directory.GetFiles(ExportDirectory); 

     foreach(var file in DspFle) 
      if (!ActualFiles.Any(x=>Path.GetFileName(x).Equals(file))) 
       return false; 

     return true; 
    } 
0
List<String> fileNames = new List<String>(); 
String[] files = Directory.GetFiles("."); 
foreach (String file in files) 
{ 
     fileNames.Add(System.IO.Path.GetFileName(file)); 
} 

這將返回帶有擴展名的文件名。然後,您可以在這一點上與您的IList進行比較。

0

爲什麼要花費所有的麻煩建立兩個列表,當你可以檢查每個文件是否存在目錄?實際上,這就是你的代碼在做什麼。

foreach(string DspFle in DspFleName.Split(',')) { 
     string CheckPath = Path.Combine(ExportDirectory,DspFle[i]); 
     if (!File.Exists(CheckPath)) return false; 
} 

return true; 
0

這也許是會做什麼你要?

 if (DspFle == "None") 
      return true; 

     List<string> DspFle = DspFleName.Split(','); 
     List<string> ActualFiles = new List<string>(); 

     foreach (string file in Directory.GetFiles(ExportDirectory) 
     { 
      DirectoryInfo di = new DirectoryInfo(file); 
      ActualFiles.Add(di.Name);    
     } 

     foreach (string file in DspFle) 
     { 
      if (!ActualFiles.Contains(dspFile)) 
       return false; 
     } 

     return true; 

DirectoryInfo將允許您返回包含擴展名的文件的名稱。