2009-10-20 9 views
0

Je souhaite obtenir les derniers fichiers écrits d'un répertoire et leurs extensions.en utilisant linq pour sélectionner le dernier fichier écrit

Un exemple de ce fichier qui pourrait exister dans le répertoire (avec leurs dates de création):

2009-10-20T07:00:00.000 filename1.mp4 
2009-10-20T07:00:01.000 filename1_0.mp4 
2009-10-20T07:00:02.000 filename1_1.mp4 
2009-10-20T07:00:00.000 filename1.wmv 
2009-10-20T07:10:00.000 filename2.mp4 
2009-10-20T07:10:00.000 filename2.wmv 

Notez que le fichier nommé « filename1 » au format mp4 a 3 versions numérotées de façon séquentielle. Je cherche les fichiers nommés « filename1 » afin d'obtenir le résultat suivant retour (sans ordre particulier):

filename1_1.mp4 
filename1.wmv 

car ces fichiers sont la dernière créé avec deux extensions, mais les deux ont le nom de fichier, « filename1 ', Je souhaite que.

Répondre

3
foreach (FileInfo fi in GetLatestFiles("c:\\test\\", "filename1")) 
{ 
    Console.WriteLine(fi.Name); 
} 

// ... 

public static IEnumerable<FileInfo> GetLatestFiles(string path, string baseName) 
{ 
    return new DirectoryInfo(path) 
     .GetFiles(baseName + "*.*") 
     .GroupBy(f => f.Extension) 
     .Select(g => g.OrderByDescending(f => f.LastWriteTime).First()); 
} 
+0

Semble fonctionner !!! Je suis heureux :))) –

0
var files = Directory.GetFiles("dir name").Select(str => new FileInfo(str)) 
      .Where(file => file.Name.StartsWith("filename1")) 
      .Where(file => file.LastWriteTime > DateTime.Now.AddDays(-1)); 

foreach(var file in files) 
{ 
Console.Write(file.Extension); 
} 

Vous devez remplacer le « filename1 » et DateTime.Now être ce que vous avez besoin

+0

ce retourneraient tous les fichiers du « nom dir » qui commence par filename1 mais inclure aussi beaucoup si résultat que je n'ai pas besoin ... ie filename1.mp4 –

+0

Vous pouvez toujours utiliser la clause Where pour filtrer les données plus - tels que seulement les fichiers avec une certaine extension, ou avoir name_ [DIGIT] etc ... Où clasue vous permettrait d'utiliser une regex pour correspondre aux noms de fichiers si un motif plus spécifique dans le nom de fichier est requis – saret

+0

recommande de combiner les clauses Where au lieu d'avoir plusieurs chaînes enchaînées – saret

Questions connexes