2010-10-18 3 views
0

Je souhaite conserver une liste des fichiers journaux existants à partir du répertoire du journal. chaque fois que cette liste atteint la limite maximale, disons 20 fichiers, je vais supprimer le fichier journal le plus ancien.vérifier les fichiers dans un répertoire et stocker leur nom dans l'ordre de l'heure de création

Chaque fois que l'application est lancée, elle vérifie le répertoire des journaux et conserve tous les noms des fichiers journaux dans une liste. mais cette liste devrait être triée avec l'heure de création.

Quelle est la bonne façon de faire cela? merci,

Répondre

1

Cela saisit tous les fichiers de plus le plus récent 20 et les supprime:

int numberOfFilesToKeep = 20; 
string logFilePath = @"c:\temp"; 
FileInfo[] logFiles = (new DirectoryInfo(logFilePath)).GetFiles(); 
var oldFiles = logFiles.OrderByDescending(t => t.CreationTime).Skip(numberOfFilesToKeep); 
foreach (var file in oldFiles) 
    file.Delete(); //you'll want a try/catch here 

Remarque, vous voudrez peut-être utiliser LastWriteTime plutôt que CreationTime ci-dessus, selon sur la façon dont les fichiers journaux sont utilisés.

4

Essayez ceci:

List<FileInfo> fi = new List<FileInfo>(); 
//load fi 
List<FileInfo> SortedFi = fi.OrderBy(t=>t.CreationTime); 
0
using System.Linq; 
using System.IO; 

DirectoryInfo di = new DirectoryInfo("mylogdir"); 
FileSystemInfo[] files = di.GetFileSystemInfos(); 
var orderedFiles = files.OrderBy(f => f.CreationTime); 

Cache orderedFiles, et actualiser au besoin chaque fois que vous roulez vers l'autre.

1

Quelque chose comme ceci:

static void Main(string[] args) 
{ 
    var files = new List<string>(); 

    foreach (var file in Directory.GetFiles("<path to your log files>")) 
    { 
     files.Add(file); 
    } 

    files.Sort(
     new Comparison<string>(
      (a, b) => new FileInfo(b).CreationTime.CompareTo(new FileInfo(a).CreationTime) 
     ) 
    ); 

    foreach (var file in files.Skip(20)) 
    { 
     // Delete file. 
    } 
} 
Questions connexes