取得又深又多的子目錄路徑

栏目: ASP.NET · 发布时间: 7年前

内容简介:有天在處理網路芳鄰的檔案時,有個需求是要在某一個根目錄下,往下找多層子目錄後,針對路徑名稱及檔案內容做後續處理,通常這時候我們會使用首先提一下

有天在處理網路芳鄰的檔案時,有個需求是要在某一個根目錄下,往下找多層子目錄後,針對路徑名稱及檔案內容做後續處理,通常這時候我們會使用 Directory 類別的 EnumerateDirectories 方法取得根目錄底下的所有子目錄的路徑,但因為子目錄很深又很多,這種取回所有子目錄路徑的方法會有反應速度很慢的問題(每次要等 5~8 秒才找得到),這時候如果能指定搜尋的子目錄深度,相信會快很多。

基本用法

首先提一下 Directory 類別提供兩種取得子目錄的方法 GetDirectoriesEnumerateDirectories

GetDirectories 回傳的是 string[] 型別,也就是一組字串陣列,背後他會將找到的所有子目錄資料都找到後一次回傳。

EnumerateDirectories 回傳的是 IEnumerable<string> ,因此是一組可列舉的字串,和 GetDirectories 最大的差別就是不會一開始就載入全部的資料,可以透過延遲載入(Lazy Loading)的方式處理資料,通常會有較好的效能。

若只是要取得目錄或檔案的名稱,請使用 Directory 類別的列舉方法,如果是要取得目錄或檔案的其他屬性,請使用 DirectoryInfoFileSystemInfo 類別。

要使用 Directory.EnumerateDirectories() 方法取得子目錄清單很簡單,基本用法請參考 官方文件 ,而我這裡用的範例程式碼如下:

var path = "D:\\DepthFolder";
Directory.EnumerateDirectories(path, "*", SearchOption.AllDirectories);

Directory.EnumerateDirectories() 第一個參數是要搜尋的目錄的相對或絕對路徑,第二個參數是比對要搜尋的目錄名稱(這裡不是用正規表示式),第三個參數是一個列舉值,決定是只包含當前目錄還是包含所有子目錄。

SearchOption.TopDirectoryOnly
SearchOption.AllDirectories

用法很簡單,這裡稍微帶過而已。

需求:取得指定層數下的子目錄清單

今天的狀況是「所要的檔案在很深的子目錄中」,想當然爾是用上面有提到的 SearchOption.AllDirectories 來取得所有子目錄,但這又會造成取得子目錄清單反應速度很慢的問題。

這時候如果我們知道所要的檔案是在「第幾層」子目錄,就可以藉由一些手法,讓整體速度提升,畢竟就不用遍巡所有深度下的子目錄。

Directory 沒有提供類似的功能,這時候我們只能自己寫了。

這程式是透過遞迴的方式去往下找每一層的目錄清單,由於每次都只看當層的子目錄而已,所以速度上會快很多,當找到指定深度的時候,就把當前的目錄路徑加入清單中,概念上相當簡單。

範例,取得第 2 層的子目錄路徑的效果如下:

取得又深又多的子目錄路徑

參考資料:


以上所述就是小编给大家介绍的《取得又深又多的子目錄路徑》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

赢在设计

赢在设计

[美] 洛芙迪 (Lance Loveday)、[美] 尼豪斯 (Sandra Niehaus) / 刘淼、枊靖、王卓昊 / 人民邮电出版社 / 2010-8 / 55.00

企业总是面临在网站设计和改进方面进行投资的抉择。怎样才能让有限的资金发挥出最大的效益呢?网站设计不应只是把网站做得赏心悦目,它更应该是提高经济收益和获得竞争优势的战略利器。是时候让网站发挥其潜能,以业务指标为导向来做设计决策,为提升网站收益而设计了。 作者凭借多年为众多网站做咨询工作的经验,为我们揭示了赢在设计的奥秘。它针对目前网站设计中存在的典型问题,先从宏观上探讨解决问题的战略手段,围绕......一起来看看 《赢在设计》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试