天天看點

C#遞歸讀取GIS目錄檔案格式

記得學習程式設計時,遞歸可以說是一種典型的程式設計思維,一種常見的需求是周遊目錄及子目錄中的檔案。後來工作時發現,其實微軟早就幫我們寫好了,不用自己老實去寫。

var files = Directory.GetFiles(@"D:", "*.*",SearchOption.AllDirectories); // 周遊所有檔案
var dirs= Directory.GetDirectories(@"D:", "*", SearchOption.AllDirectories); //周遊所有檔案夾
      

它包括三個參數:

參數1:檔案路徑,要搜尋的檔案目錄。

參數2:過濾格式,不填或"*.*"或"*"表示搜尋所有格式;支援通配符号,正規表達式,強大!

參數3:搜尋選項,SearchOption.TopDirectoryOnly 預設選項,僅包含目前目錄;SearchOption.AllDirectories 包含所有子目錄。

然後學了還是有用,在GIS中,有一些特殊的格式,如gdb是一種檔案夾,gdb内的各種檔案并不是我們需要搜尋的,這就必須用遞歸思想去解決。下面結合this和ref寫了一個擴充該方法。

public static void GetFiles(this string directory,ref List<string> list,string searchPattern="*.*")
{
    if (Directory.Exists(directory))
    {
        string[] directories = Directory.GetDirectories(directory, searchPattern, SearchOption.TopDirectoryOnly);
        string[] files = Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly);
        list.AddRange(files);

        foreach (string item in directories)
        {
            if (item.ToLower().EndsWith(".gdb"))
            {
                list.Add(item);
            }
            else
            {
                GetFiles(item,ref list);
            }
        }
    }
}