1. 程式人生 > 實用技巧 >C#遞迴讀取GIS目錄檔案格式

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);
            }
        }
    }
}