目前我的應用程序使用string [] subdirs = Directory.GetDirectories(path)來獲取子目錄的列表,現在我想提取最新的路徑最後修改)子目錄。如何獲取最新(最後修改)的目錄[C#]
完成此操作的最簡單方法是什麼? (效率不是主要問題 - 但魯棒性是)
目前我的應用程序使用string [] subdirs = Directory.GetDirectories(path)來獲取子目錄的列表,現在我想提取最新的路徑最後修改)子目錄。如何獲取最新(最後修改)的目錄[C#]
完成此操作的最簡單方法是什麼? (效率不是主要問題 - 但魯棒性是)
不使用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;
}
}
您可以使用Directory.GetLastWriteTime(或Directory.GetLastWriteTimeUtc
,在這種情況下,當您僅進行相對比較時,這並不重要)。
雖然你只是想看看操作系統報告的「修改」時間,或者你是否想找到最近修改過的文件裏面的目錄呢?它們並不總是匹配的(也就是說,操作系統並不總是在修改文件時更新包含「上次修改時間」的目錄)。
最近的文件夾(文件內幕無關緊要) – Shaitan00 2010-05-31 04:11:37
在這種情況下,'Directory.GetLastWriteTime'就是你所追求的。 Laramie的解決方案也行得通,正如我剛剛所說的那樣(他只是非常友好地爲您編寫代碼;) – 2010-05-31 04:30:54
非遞歸:
new DirectoryInfo(path).GetDirectories()
.OrderByDescending(d=>d.LastWriteTimeUtc).First();
遞歸:
new DirectoryInfo(path).GetDirectories("*",
SearchOption.AllDirectories).OrderByDescending(d=>d.LastWriteTimeUtc).First();
如果你正在建設一個窗口服務,你想,當一個新的通知文件或目錄已創建,您也可以使用FileSystemWatcher。誠然,並不容易,但玩起來很有趣。 :)
-1這隻適用於在應用程序運行時創建目錄,但這不一定是真實的根據問題中提供的信息。 – 2010-05-31 04:17:21
這正是我指定Windows服務的原因,意味着它將一直在運行。 – 2010-05-31 04:20:11
這不一定是真的。可以啓動和停止服務,或間歇性運行(我認爲這是一個糟糕的設計,但這是一個單獨的問題)。例如,如果在安裝應用程序之前創建文件夾,則此方法不會通知應用程序。 – 2010-05-31 04:23:55
被警告:您可能需要調用Refresh()
您的目錄信息對象,以獲得正確的信息:
例如在拉勒米的回答你編輯到:
DirectoryInfo fi1 = new DirectoryInfo(subdir);
fi1.Refresh();
DateTime created = fi1.LastWriteTime;
否則,你可能會得到過時的信息和我一樣:
「呼籲必須進行刷新嘗試獲取屬性 信息之前,或信息會過時。「
http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.refresh(v=vs.71).aspx
試試這個:
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
它應該是遞歸(所有後代)? – 2010-05-31 04:13:52