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?
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;
}
}
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();
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
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
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).
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. :)