1. 程式人生 > 其它 >C# 檔案遍歷

C# 檔案遍歷

C# 檔案遍歷

程式碼

public static class FileUtils
    {
        // 測試一下
        public static void TestGetCurrentFileList()
        {
            var fs = GetFileList(Environment.CurrentDirectory, names:".dll");
            foreach (var f in fs)
            {
                Console.WriteLine(f.FullName);
            }
        }
        /// <summary>
        /// 遞迴遍歷資料夾獲取檔案
        /// </summary>
        /// <param name="path"></param>
        public static List<FileInfo> GetFileList(string path, bool isRecursion = false, int pathDeep = 3, List<FileInfo> fileInfos = null, params string[] names)
        {
            if (fileInfos == null)
            {
                fileInfos = new List<FileInfo>();
            }
            if (pathDeep < 0)
            {
                return fileInfos;
            }
            DirectoryInfo theFolder = new DirectoryInfo(path);
            //獲取資料夾下檔案
            FileInfo[] files = theFolder.GetFiles();
            foreach (var file in files)
            {
                // 匹配檔案
                if (names == null || names.Length < 1)
                {
                    fileInfos.Add(file);
                }
                else
                {
                    foreach (var fn in names)
                    {
                        if (string.IsNullOrEmpty(fn))
                        {
                            continue;
                        }
                        if (file.Name.Contains(fn) || Regex.IsMatch(file.Name, fn))
                        {
                            fileInfos.Add(file);
                        }
                    }
                }
            }
            if (isRecursion)
            {
                // 如果是遞迴,遍歷該資料夾下的資料夾
                var dirs = theFolder.GetDirectories();
                if (!dirs.Any())
                {
                    return fileInfos;
                }
                foreach (var dir in dirs)
                {
                    GetFileList(dir.FullName, isRecursion, --pathDeep, fileInfos, names);
                }
            }
            return fileInfos;
        }

    }