C#獲取文件和文件名稱

使用System.IO裏的Directory類.這是一個靜態類,所以不需要new就能直接使用。

1.Directory.GetFiles 方法

Directory.GetFiles是一個重載的方法。可以直接提供文件夾的路徑獲取所在目錄中文件,返回一個文件全名的字符串數組。

2個參數的裏面,第二參數可以使用*和?通配符實現模糊匹配查找文件。注意這個參數是不支持正則表達式匹配的方式。

三參數的時候,SearchOption 是表示指定是搜索當前目錄,還是搜索當前目錄及其所有子目錄。其可用參數如下:

 

獲取當前目錄的所有文件名(不含子目錄的文件)

using System;
using System.IO;

namespace 獲取文件文件夾
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetFiles(path);
            Console.WriteLine($"根目錄名:{path},含有文件數:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

 

  

需要遞歸獲取所有幷包含子目錄文件 只需要增加SearchOption參數即可。

using System;
using System.IO;

namespace 獲取文件文件夾
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetFiles(path,"*",SearchOption.AllDirectories);
            Console.WriteLine($"根目錄名:{path},含有文件數:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

 

2.Directory.GetDirectories 方法

這也是和GetFiles類似的重載方法。只是返回滿足指定條件的子目錄的名稱。

可以直接提供文件夾的路徑獲取所在路徑的子目錄名,返回一個文件夾名稱路徑的字符串數組。

2個參數的裏面,第二參數可以使用*和?通配符實現模糊匹配查找文件。注意這個參數是不支持正則表達式匹配的方式。

三參數的時候,SearchOption 是表示指定是搜索當前目錄,還是搜索當前目錄及其所有子目錄。其枚舉參數和GetFiles的時候是一樣的。

 獲取當前目錄的所有文件夾名(不含子目錄)

using System;
using System.IO;

namespace 獲取文件文件夾
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetDirectories(path);
            Console.WriteLine($"根目錄名:{path},含有目錄數:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

需要遞歸獲取所有子目錄, 只需要增加SearchOption參數即可。 

using System;
using System.IO;

namespace 獲取文件文件夾
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetDirectories(path,"*",SearchOption.AllDirectories);
            Console.WriteLine($"根目錄名:{path},含有目錄數:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

要按照每個文件夾分類列舉每個文件夾和其所含有的文件名稱(不包含子目錄文件).可以先設置SearchOptions參數獲取所有的子目錄。然後遍歷每個子目錄,只獲取當前目錄的所有文件,即可實現按文件夾分類列舉文件。根目錄的單獨列出來即可。

using System;
using System.IO;

namespace 獲取文件文件夾
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetFiles(path);
            Console.WriteLine($"根目錄名:{path},含有文件數:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }
            string[] flds = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);

            foreach (string fld in flds)
            {
                string[] fs = Directory.GetFiles(fld);
                Console.WriteLine($"\n\n目錄名:{fld},含有文件數:{fs.Length}");
                foreach (string f in fs)
                {
                    Console.WriteLine($"{f}");
                }
            }

            Console.ReadKey();
        }
    }
}

 

在官網裏提到了:

 

 

 

這兩個枚舉文件方法的使用是和上面我提到的GetFiles/GetDirectories是一樣的。 只是返回的結果是一個可枚舉的集合而不是我們之前的字符串數組。具體我就不寫了。

不用分類枚舉文件和目錄的話可以使用Directory.EnumerateFileSystemEntries.不管文件還是文件夾名都存入集合。該方法也是和前面用法差不多.設置SearchOption也可以獲取所有子目錄及子目錄文件。下面只展示枚舉根目錄的所有文件/子目錄(不遞歸查詢子目錄/文件)。

using System;
using System.Collections.Generic;
using System.IO;

namespace 獲取文件文件夾
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            List<string> fls =new  List<string>(Directory.EnumerateFileSystemEntries(path));
            Console.WriteLine($"根目錄名:{path},含有文件目錄數:{fls.Count}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }

            Console.ReadKey();
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章