2013-08-07 50 views
1

我有一個C#應用程序,其中需要刪除所有創建日期比今天的日期更早的文件。我們怎樣才能做到這一點?在C中使用CreationTime刪除目錄#

我在谷歌搜索找到一個示例代碼。因此,我決定創建一個並將其發佈到此處。如果要從目錄中刪除較舊的文件,可以使用下面的方法。如果您對此有任何疑問,請讓我知道,我很樂意爲您提供幫助。

public void FolderDelete() 
      { 

       DirectoryInfo d = new DirectoryInfo(ConfigurationManager.AppSettings["<path>"]); 
       if (d.Exists) 
       { 
        //Get all Directories from the path 
        string[] folders = Directory.GetDirectories(d.ToString()); 
        foreach (var item in folders) 
        { 
         DirectoryInfo info = new DirectoryInfo(item); 
         //It will purge the 14 days older directories 
         if (info.CreationTime < DateTime.Now.AddDays(-14)) 
         { 
          info.Delete(true); 
         } 
        } 
       } 


       else 
       { 
        Console.WriteLine("There is no 14 days older files."); 
       } 

      } 

這是非常有用的,簡單use.I嘗試上述method.Could你的任何一個有另一個想法,請與我分享。

+1

考慮制定* Q&A風格的問題*接下來的時間,除非你明確地要求一個更好或更優雅的解決方案。 – Nolonar

+2

寫入控制檯有點欺騙,因爲當目錄不存在時它實際上被調用。 –

+0

原來這很方便。只是感到驚訝的是沒有Linq風格的做法。編輯:實際上找到了用於文件的東西,但也適用於目錄。將發佈該答案。 – ouflak

回答

0

發現這樣做的LINQ的方式...

DirectoryInfo d = new DirectoryInfo(ConfigurationManager.AppSettings["<path>"]); 

    List<string> recentDirectories = d.GetDirectories() 
             .Select(x => x.EnumerateDirectories() 
                .OrderByDescending(f => DateTime.Now.AddDays(-14)) 
                .FirstOrDefault()) 
             .Where(x => x != null) 
             .Select(x => x.FullName) 
             .ToList(); 

    foreach (string dir in recentDirectories) 
    { 
     Directory.Delete(dir); 
    } 

這是基於一個答案this question here

這裏是做等價的非LINQ的方式:

DirectoryInfo[] testDirs = d.GetDirectories(); 
    List<DirectoryInfo> dirInfos = d.EnumerateDirectories().ToList(); 
    IOrderedEnumerable<DirectoryInfo> infos = dirInfos.OrderByDescending(f => DateTime.Now.AddDays(-14)); 
    dirInfos = infos.ToList(); 

    foreach (DirectoryInfo dir in dirInfos) 
    { 
     Directory.Delete(dir.FullName); 
    }