[英]Fastest way to retrieve list of files by search criteria - c#
我有一個帶有txt文件的目錄結構。
我想獲取文件名列表,其中修改/創建日期在一個范圍內。
到目前為止,我有這個:
DirectoryInfo directory = new DirectoryInfo(@"C:\MotionWise\Manifest\000EC902F17F");
DateTime from_date = DateTime.Now.AddMinutes(-300);
DateTime to_date = DateTime.Now;
List<FileInfo> files = directory.GetFiles("*", SearchOption.AllDirectories).Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date).ToList();
現在,我只對完整路徑名感興趣。
如果我枚舉文件列表,可以將完整路徑名添加到新列表/數組等中,但這似乎浪費了額外的精力,因為我覺得可以在lambada代碼中做到這一點?
如果可以在lambada代碼中完成,按文件信息進行的選擇會不會太“繁重”? 有沒有一種方法可以只選擇完整路徑名,而無需將每個條目“加載”到文件信息中?
我一直在想執行dir DOS命令並在Process類中捕獲輸出。
如果僅對路徑感興趣,請不要使用DirectoryInfo.GetFiles
因為它返回一個數組,並且因為它是FileInfo[]
,其中每個FileInfo
對象都包含了您不感興趣的所有信息。 您可以使用File.GetLastWriteTime
來獲取它。
而是使用Directory.EnumerateFiles
,它僅懶惰地返回與您的過濾條件和搜索模式匹配的路徑。
List<string> paths = Directory.EnumerateFiles(@"C:\MotionWise\Manifest\000EC902F17F", "*", SearchOption.AllDirectories)
.Where(path => {
DateTime lastWriteTime = File.GetLastWriteTime(path);
return lastWriteTime >= from_date && lastWriteTime <= to_date;
})
.ToList();
只需在FullName
上Select
:
List<string> files = directory.GetFiles("*", SearchOption.AllDirectories)
.Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date)
.Select(f => f.FullName)
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.