使用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();
}
}
}