2009-09-07 14 views
4

J'utilise VSTS 2008 + C# + .Net 3.0. Je veux énumérer tous les fichiers dans un répertoire en fonction du temps de création, c'est-à-dire que les fichiers créés plus récemment seront enumerate au début, les fichiers les plus anciens seront enfin énumérés. Des idées pour implémenter cela?Fichier liste C# dans le répertoire

Répondre

6

Quelque chose comme ça

 

System.IO.FileInfo[] array = new System.IO.DirectoryInfo("directory_path").GetFiles(); 
Array.Sort(array, delegate(System.IO.FileInfo f1, System.IO.FileInfo f2) 
      { 
       return f2.CreationTimeUtc.CompareTo(f1.CreationTimeUtc); 
      }); 
 
+1

Vous ne devez pas annuler l'ordre d'avoir d'abord des fichiers plus récents comme demandé? –

+0

Cédric, vous avez raison. Merci. –

+1

Deuxième point: avec VS2008, vous pouvez utiliser lambdas, même en 2.0 ou 3.0! Facilite la lecture ... mais vous ne pouvez les utiliser que si votre processus de construction utilise MsBuild 3.5 (attention au serveur CI par exemple ...) –

4

Je probablement utiliser LINQ et une liste ... quelque chose comme cela devrait fonctionner:

DirectoryInfo di = new DirectoryInfo("YourPath"); 
List<FileInfo> files = di.GetFiles().OrderBy(f => f.CreationTime).ToList(); 

foreach (FileInfo file in files) 
     { 
      //do something 
     } 
+0

Désolé j'utilise .Net 3.0, ne peut pas utiliser LINQ. Toute solution basée sur .Net 3.0? – George2

2

Essayez somithing comme ceci:

DirectoryInfo di = new DirectoryInfo("path to folder"); 
FileInfo[] files = di.GetFiles(); 
IOrderedEnumerable<FileInfo> enumerable = files.OrderBy(f => f.CreationTime); 

foreach (FileInfo info in enumerable) 
{ 
    // do stuff...   
} 
+0

Désolé, j'utilise .Net 3.0, je ne peux pas utiliser LINQ. Toute solution basée sur .Net 3.0? – George2

-1
DirectoryInfo baseFolder=new DirectoryInfo("folderName"); 
FileInfo[] files=baseFolder.GetFiles(""); 
for(int i=1; i<=files.Length;i++) 
for(int j=1; j<files.Length;j++) 
{ 
    if(files[j].CreationTime > files[j+1].CreationTime) 
    { 
     FileInfo f = files[j]; 
     files[j] = files[j+1]; 
     files[j+1] = f; 
    } 
} 
+0

Je ne vois pas l'intérêt de tout réécrire car le framework a beaucoup de choses à commander pour des collections! –

2

MODIFIER: mise à jour, voici une solution non-LINQ

FileInfo[] files = new DirectoryInfo("directory").GetFiles(); 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2) { 
    return f2.CreationTime.CompareTo(f1.CreationTime); 
}); 

ci-dessus triera par le dernier au plus ancien. Pour trier le plus ancien au dernier changement du délégué: return f1.CreationTime.CompareTo(f2.CreationTime);


solution LINQ:

FileInfo[] files = new DirectoryInfo("directory").GetFiles(); 
var results = files.OrderByDescending(file => file.CreationTime); 

Utilisez OrderByDescending pour trier par le plus récent CreationTime, sinon utiliser OrderBy pour trier du plus ancien au plus récent CreationTime.

+1

Ajout d'une solution non-LINQ basée sur votre commentaire à une autre réponse –

Questions connexes