簡體   English   中英

通過搜索條件檢索文件列表的最快方法-C#

[英]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();

只需在FullNameSelect

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM