2014-03-26 74 views
0

我碰到了一堵磚牆!我的目標是僅在給定日期在兩個文件夾之間複製文件,忽略具有較早的LastWriteTime的同一文件夾中的文件。我的邏輯似乎工作,但是當我運行代碼時發現它找不到我的測試文件,但我收到一個異常,即使它不能告訴我測試文件的名稱,如果它不工作的話! :(我已經發布我下面的代碼,請大家幫忙!通過LastWriteTime複製文件

namespace RunAfterFirstScan 
{ 
    class Program 
    { 

    public static IEnumerable<string> GetNewest(string path) 
    { 
     DateTime to_date = DateTime.Today.AddDays(-5); 
     var directoryInfo = new DirectoryInfo(path); 
     if (!directoryInfo.Exists) return Enumerable.Empty<string>(); 

     var query = 
      from file in directoryInfo.GetFiles() 
      where file.LastWriteTime.Date == to_date.Date   
      select file.Name; 

     return query; 
    } 


    static void Main(string[] args) 
    { 

     string sourcePath = @"C:\Users\berryn01\Desktop\From\"; 
     string targetPath = @"C:\Users\berryn01\Desktop\To\"; 

     if (!System.IO.Directory.Exists(targetPath)) 
     { 
      System.IO.Directory.CreateDirectory(targetPath); 
     } 


     if (System.IO.Directory.Exists(sourcePath)) 
     { 
      string[] files = GetNewest(sourcePath).ToArray(); 
      foreach (string s in files) 
      { 

       string fileName = System.IO.Path.GetFileName(s); 
       string destFile = System.IO.Path.Combine(targetPath, fileName); 
       System.IO.File.Copy(s, destFile); 
      } 
     } 
     else 
     { 
      Console.WriteLine("Source path does not exist!"); 
     } 


     Console.WriteLine("Press any key to exit."); 
     Console.ReadKey(); 

    } 
} 
} 
+1

哪部分不工作有沒有異常或錯誤?詳細說明您的問題 –

+0

如果您的文件是在今天創建的,它將永遠不會發現,因爲你在GetNewest方法中減去5天。此外,我認爲比較'file.LastWriteTime.Date == to_date.Date'是一個錯誤,應該是'file.LastWriteTime.Date> = to_date.Date' –

+0

對不起,詳細說明,有一個例外:未處理mscorlib.dll 中發生類型'System.IO.FileNotFoundException'的異常其他信息:找不到文件'Opinion Set Routine.docx'。我沒有那麼擔心日期,因爲我只是使用減法來測試前面創建的文件夾中的文件。但是,每次我更改此值時,都會在該給定日期找到正確的文件,然後引發異常,表示無法找到它。 –

回答

0

您的查詢是錯誤的。我認爲,必須根據你的需要是>=<=

var query = 
      from file in directoryInfo.GetFiles() 
      where file.LastWriteTime.Date <= to_date.Date 
      select file.Name; 

OR

var query = 
      from file in directoryInfo.GetFiles() 
      where file.LastWriteTime.Date >= to_date.Date 
      select file.Name; 
+0

謝謝你們兩位,我現在就試試。 –

+0

好的,我已將查詢更改爲'> ='但收到相同的異常。比方說,我今天在文件夾中創建了文件,並使用'DateTime to_date = DateTime.Today'運行它。我將拋出異常,但如果我回頭一天,它找不到任何代碼執行正常。在我看來,它正確地找到該文件,然後以某種方式運行復制方法時不使用完整路徑?我不確定,我在那裏輸了。 –

+0

對不起我的格式,只是在這裏學習道路的規則。 –