web-dev-qa-db-fra.com

Comment obtenir le dernier répertoire (dernière modifié) [C #]

Actuellement, mon application utilise string [] subdirs = Directory.GetDirectories (path) pour obtenir la liste des sous-répertoires. Je souhaite maintenant extraire le chemin du dernier sous-répertoire (modifié) de la liste.

Quel est le moyen le plus simple d’atteindre cet objectif?

25
Shaitan00

sans utiliser LINQ

DateTime lastHigh = new DateTime(1900,1,1);
string highDir;
foreach (string subdir in Directory.GetDirectories(path)){
    DirectoryInfo fi1 = new DirectoryInfo(subdir);
    DateTime created = fi1.LastWriteTime;

    if (created > lastHigh){
        highDir = subdir;
        lastHigh = created;
    }
}
14
Laramie

Non récursif:

new DirectoryInfo(path).GetDirectories()
                       .OrderByDescending(d=>d.LastWriteTimeUtc).First();

Récursif:

new DirectoryInfo(path).GetDirectories("*", 
    SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First();
45
Matthew Flaschen

Soyez averti: vous devrez peut-être appeler Refresh() sur votre objet Info du répertoire pour obtenir les informations correctes:

par exemple. dans la réponse de Laramie, vous éditeriez pour:

DirectoryInfo fi1 = new DirectoryInfo(subdir);
fi1.Refresh();
DateTime created = fi1.LastWriteTime;

Sinon, vous pourriez obtenir des informations obsolètes comme je l'ai fait:

"Les appels doivent être effectués sur Actualiser avant de tenter d'obtenir les informations sur l'attribut , Sinon ces informations seront obsolètes."

http://msdn.Microsoft.com/en-us/library/system.io.filesysteminfo.refresh(v=vs.71).aspx

3
Phileas Fogg

Essaye ça: 

string pattern = "*.txt"

var dirInfo = new DirectoryInfo(directory);

var file = (from f in dirInfo.GetFiles(pattern) 
            orderby f.LastWriteTime descending 
            select f).First();

http://zamirsblog.blogspot.com/2012/07/c-find-most-recent-file-in-directory.html

2
Zamir

Vous pouvez utiliser Directory.GetLastWriteTime (ou Directory.GetLastWriteTimeUtc, dans ce cas, cela n'a pas vraiment d'importance si vous ne faites que des comparaisons relatives).

Bien que vous vouliez simplement regarder l'heure "modifiée" telle que rapportée par le système d'exploitation, ou voulez-vous trouver le répertoire avec le fichier le plus récemment modifié inside it? Ils ne correspondent pas toujours (c’est-à-dire que le système d’exploitation ne met pas toujours à jour le répertoire contenant la "dernière modification" lorsqu’il modifie un fichier).

1
Dean Harding

Si vous créez un service Windows et que vous souhaitez être averti lorsqu'un nouveau fichier ou répertoire est créé, vous pouvez également utiliser un FileSystemWatcher . Certes pas aussi facile, mais intéressant de jouer avec. :)

0
Chad Ruppert