3
votes

Sélectionnez un fichier basé sur une chaîne

J'ai les fichiers comme suit:

Test_221218_123.txt

Test_221218_456.txt

Test_221218_789.txt

Ici '221218' est la date . J'ai fait un test comme suit:

var files = d.GetFiles().Where(f => f.Name.Contains("221218"));
//OR
var files = d.GetFiles().Where(f => f.Name.Contains("221218")).Select(f => f.LastWriteTime);

Pour les tests, je passe la date est statique uniquement à des fins de test mais ce sera une variable lors de la mise en production. Ce qui précède sélectionne tous les fichiers pour moi. Je dois sélectionner le dernier fichier (en terme de date).

J'ai essayé comme ci-dessous

var d = new DirectoryInfo(@"C:\");
var files = d.GetFiles().Where(f => f.Name.Contains("221218"));

Le premier me donne une liste de tous les fichiers avec 221218 . Le second me donne la date. Comment sélectionner le dernier fichier?


3 commentaires

var fichier = d.GetFiles (). Où (f => f.Name.Contains ("221218")). OrderByDescending (f => f.LastWriteTime) .FirstOrDefault ()


var files = d.GetFiles (). Where (f => f.Name.Contains ("221218")). OrderBy (o => o.LastWriteTime) .LastOrDefault ();


Excellent, merci;


3 Réponses :


2
votes
FileInfo latestByWriteTime = new DirectoryInfo( @"C:\" )
    .GetFiles()
    .Where( f => f.Name.Contains( "221218", StringComparer.OrdinalIgnoreCase ) )
    .OrderByDescending( f => f.LastWriteTime )
    .FirstOrDefault();

1 commentaires

En fait, je l'ai moi-même juste après avoir posté la question. Et je suis content d'avoir fait quelque chose de similaire à votre réponse. sauf pour le StringComparer.OrdinalIgnoreCase . Est-ce seulement pour ignorer le cas



0
votes

Vous pouvez utiliser OrderByDescending sur la propriété LastWriteTime , puis sélectionner le premier dans la liste. Cela fonctionnerait comme suit:

var file = d.GetFiles().Where(f => f.Name.Contains("221218")).OrderByDescending(f => f.LastWriteTime).FirstOrDefault();

Sinon, vous pouvez envisager de nommer vos fichiers en utilisant la méthode DateTime.ToFileTime () , puis vous pouvez simplement sélectionner le dernier avec le plus grand horodatage.


0 commentaires

0
votes

Vérifiez ceci:

var d = new DirectoryInfo(@"C:\");
var files = d.GetFiles()
   .Where(f => f.Name.Contains(DateTime.Now.ToString("ddMMyy")))
   .OrderByDescending(f => f.LastWriteTime)
   .FirstOrDefault();

Et pour la date

DateTime.Now.ToString("ddMMyy")

Requête finale

var d = new DirectoryInfo(@"C:\");
var files = d.GetFiles()
   .Where(f => f.Name.Contains("221218"))
   .OrderByDescending(f => f.LastWriteTime)
   .FirstOrDefault();


1 commentaires

Je suppose que LastWriteTime convient mieux car les fichiers peuvent être écrasés afin que l'heure de création reste la même.