public static void WalkTree(String dirName, ITreeWalker walker) { var dirCount = 0; dirName = StringUtils.StandardisePath(dirName); Stack <String> dirStack = new Stack <String>(); dirStack.Push(dirName); while (dirStack.Count > 0) { String lastPath = dirStack.Pop(); DirectoryInfo di = new DirectoryInfo(lastPath); if (!di.Exists || ((di.Attributes & FileAttributes.Hidden) != 0 && dirCount > 0)) { continue; } ++dirCount; foreach (FileInfo fileInfo in di.GetFiles(walker.FileSearchPattern())) { // compose full file name from dirName String f = lastPath; if (f[f.Length - 1] == '/') { f += fileInfo.Name; } else { f = f + "/" + fileInfo.Name; } var cmd = walker.DoFile(f); switch (cmd) { case TreeWalkerCmd.Skip: continue; case TreeWalkerCmd.Exit: goto EXIT; } } if (walker.IsRecursive()) { foreach (DirectoryInfo dirInfo in di.GetDirectories(walker.DirectorySearchPattern())) { // compose full path name from dirName String p = lastPath; if (p[p.Length - 1] == '/') { p += dirInfo.Name; } else { p = p + "/" + dirInfo.Name; } FileAttributes fa = File.GetAttributes(p); if ((fa & FileAttributes.Hidden) == 0) { var cmd = walker.DoDirectory(p); switch (cmd) { case TreeWalkerCmd.Skip: continue; case TreeWalkerCmd.Exit: goto EXIT; } dirStack.Push(p); } } } } EXIT: ; }
private static void WalkTree(String dirName, ITreeWalker walker) { dirName = Common.StringUtils.StandardisePath(dirName); LinkedList <String> dirStack = new LinkedList <String>(); dirStack.AddLast(dirName); while (dirStack.Count > 0) { String lastPath = dirStack.Last.Value; dirStack.RemoveLast(); DirectoryInfo di = new DirectoryInfo(lastPath); if (!di.Exists || (di.Attributes & FileAttributes.Hidden) != 0) { continue; } foreach (FileInfo fileInfo in di.GetFiles(walker.FileSearchPattern())) { // compose full file name from dirName String f = lastPath; if (f[f.Length - 1] == '/') { f += fileInfo.Name; } else { f = f + "/" + fileInfo.Name; } if (!walker.DoFile(f)) { goto EXIT; } } if (walker.IsRecursive()) { foreach (DirectoryInfo dirInfo in di.GetDirectories(walker.DirectorySearchPattern())) { // compose full path name from dirName String p = lastPath; if (p[p.Length - 1] == '/') { p += dirInfo.Name; } else { p = p + "/" + dirInfo.Name; } dirStack.AddLast(p); FileAttributes fa = File.GetAttributes(p); if ((fa & FileAttributes.Hidden) == 0) { if (!walker.DoDirectory(p)) { goto EXIT; } } } } } EXIT: ; }