我們寫程序經常要讀取某一目錄下有哪些文件,並且需要遞歸獲取,下面分享一下我是怎麼實現的。。
static bool ExistsDirectory(string direName)
{
return System.IO.Directory.Exists(direName);
}
/// <summary>
/// 遞歸獲取某一目錄下的符合條件的所有文件
/// </summary>
/// <param name="path">目錄路徑</param>
/// <param name="filter">要過濾的文件類型如m*或*.mp3等等不能爲null</param>
/// <param name="isTiGui">是否遞歸獲取</param>
/// <returns>所有文件</returns>
static List<string> _GetAllFilesFromPath(string path, string filter, bool isTiGui = true)
{
List<string> files = new List<string>();
if (!ExistsDirectory(path))
return files;
if (isTiGui)
{
string[] dirs = Directory.GetDirectories(path);//得到子目錄
foreach (var str in dirs)
files.AddRange(GetAllFilesFromPath(str, filter, isTiGui));
}
string[] tempfiles = Directory.GetFiles(path, filter);
files.AddRange(tempfiles);
return files;
}
/// <summary>
/// 遞歸獲取某一目錄下的符合條件的所有文件
/// </summary>
/// <param name="path">目錄路徑</param>
/// <param name="filters">要過濾的文件類型如m*或*.mp3等等不能爲null 多個用|,隔開</param>
/// <param name="isTiGui">是否遞歸獲取</param>
/// <returns>所有文件</returns>
public static List<string> GetAllFilesFromPath(string path, string filters, bool isTiGui = true)
{
List<string> files = new List<string>();
if (!string.IsNullOrWhiteSpace(filters))
{
foreach (var item in filters.Split(new Char[] { ',', '|' }, StringSplitOptions.RemoveEmptyEntries))
{
var _files = _GetAllFilesFromPath(path, item, isTiGui);
foreach (var _file in _files)
{
files.Add(_file);
}
}
return files;
}
else
return GetAllFilesFromPath(path, isTiGui);
}
/// <summary>
/// 遞歸獲取某一目錄下的所有文件
/// </summary>
/// <param name="path">目錄路徑</param>
/// <param name="isTiGui">是否遞歸獲取</param>
/// <returns>所有文件</returns>
public static List<string> GetAllFilesFromPath(string path, bool isTiGui = true)
{
return GetAllFilesFromPath(path, "*.*", isTiGui);
}
/// <summary>
/// 遞歸獲取某一目錄下的所有目錄
/// </summary>
/// <param name="path">目錄路徑</param>
/// <param name="isTiGui">是否遞歸獲取</param>
/// <returns>所有目錄</returns>
public static List<string> GetAllDirectoriesFromPath(string path, bool isTiGui = true)
{
List<string> dirs = new List<string>();
string[] tempdirs = Directory.GetDirectories(path);//得到子目錄
if (isTiGui)
foreach (var str in tempdirs)
dirs.AddRange(GetAllDirectoriesFromPath(str, isTiGui));
dirs.AddRange(tempdirs);
return dirs;
}