AcTools.Utils.FileUtils.GetFilesRecursive C# (CSharp) Method

GetFilesRecursive() private method

private GetFilesRecursive ( string path, string searchPattern = null ) : IEnumerable
path string
searchPattern string
return IEnumerable
        public static IEnumerable<string> GetFilesRecursive(string path, string searchPattern = null) {
            var queue = new Queue<string>();
            queue.Enqueue(path);

            while (queue.Count > 0) {
                path = queue.Dequeue();

                string[] dirs = null;
                try {
                    dirs = Directory.GetDirectories(path);
                } catch (Exception) {
                    // ignored
                }

                if (dirs != null) {
                    foreach (var t in from t in dirs
                                      let attributes = new DirectoryInfo(t).Attributes
                                      where (attributes & (FileAttributes.ReparsePoint | FileAttributes.Hidden | FileAttributes.System)) == 0
                                      select t) {
                        queue.Enqueue(t);
                    }
                }

                string[] files = null;
                try {
                    files = searchPattern == null ? Directory.GetFiles(path) : Directory.GetFiles(path, searchPattern);
                } catch (Exception) {
                    // ignored
                }

                if (files == null) continue;

                foreach (var t in files) {
                    yield return t;
                }
            }
        }