2016-09-15 66 views
1

我必須對包含數百萬個文件的文件夾進行一些清理。最終,我想抓住這些文件,然後看看它們是否存在於數據庫中。但是我需要先抓住這些文件,而不讓程序窒息。獲取數百萬文件的文件夾中的第一個文件

我試着去使用

var file = Directory.GetFiles(uri, "*.*").FirstOrDefault(); 

的路線然而,這需要永遠運行。由於文件的數量。

是否有更好的方法來抓取不會花費那麼長時間的文件?

+3

這就是爲什麼你應該通過在子目錄中批量分割你的文件。一個包含數百萬個文件的目錄是一個糟糕的主意。 –

+1

除了使用已知文件的直接路徑(或基於某種預測算法縮小搜索過濾器)之外,我沒有看到更簡單的方法。也許把它移到一個異步線程,這樣它就不會鎖定你的程序。一個建議是如果您需要多次運行該方法,請將這些文件加載​​到HashSet 中。然後,您可以針對哈希集運行未來呼叫。 –

+0

@LucasTrzesniewski相信我。我確定,因爲他不想要這個。然而,我被解僱了。 – Prescient

回答

6

是的,Directory.EnumerateFiles是你在找什麼。這將延遲加載您的文件,因此發出FirstOrDefault()不會等待所有文件被讀取。

從文檔:

的EnumerateFiles和GetFiles的方法的區別如下:當您使用EnumerateFiles,你可以返回整個集合之前開始枚舉名稱的集合;當您使用GetFiles時,您必須等待返回數組之前返回整個名稱數組。因此,當您使用許多文件和目錄時,EnumerateFiles可以更高效。

除此之外 - 具有數百萬個文件的文件夾只是一個壞主意

+0

相信我。這是一個可怕的想法。一個我不想要的,想要修復的。但我在解決這個問題上已經過時了。 – Prescient

+0

經過測試,這工作得很好。太感謝了。 – Prescient

相關問題