使用 Directory.GetFiles() 高效率擷取多種檔案類型
Directory.GetFiles()
方法是列出目錄中檔案的便利工具。 但是,其內建過濾功能一次只允許處理一種文件類型。 本文探討了克服此限制並在單一操作中檢索符合多個條件的文件的解決方案。
挑戰:多檔案類型過濾
如果沒有解決方法,直接使用 Directory.GetFiles()
檢索具有多個副檔名(例如 .mp3 和 .jpg)的檔案是不可能的。
解:
有兩種有效的方法可以繞過這個限制:
1。利用 Directory.EnumerateFiles()
(.NET 4.0 及更高版本):
Directory.EnumerateFiles()
提供了一種更節省記憶體的方法,特別是在處理大量文件時。它迭代文件,而不將它們一次全部加載到內存中。 然後,您可以使用 LINQ 過濾結果:
<code class="language-csharp">var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg")); </code>
此程式碼片段會擷取「C:path」(及其子目錄)中的所有文件,並過濾結果以僅包含 .mp3 和 .jpg 檔案。
2。 使用 Directory.GetFiles()
進行自訂過濾:
對於較舊的 .NET 版本或 EnumerateFiles()
不理想的情況,您可以使用 GetFiles()
並隨後套用自訂篩選器:
<code class="language-csharp">var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>
這實現了與前一個方法相同的結果,但首先將所有檔案載入到記憶體中。
效能注意事項:
雖然這兩種方法都達到了預期的結果,但 Directory.EnumerateFiles()
通常因其記憶體效率而受到青睞,尤其是在處理大型目錄時。 Directory.GetFiles()
對於較小的目錄可能會更快,但對於許多檔案來說記憶體開銷可能會變得很大。 選擇最適合您的特定應用程式的效能和記憶體使用平衡的方法。
以上是如何使用 Directory.GetFiles() 檢索具有多個篩選器的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!