Last active
February 11, 2020 22:52
-
-
Save ohlawdie/be323977889de8ceea390b281d768165 to your computer and use it in GitHub Desktop.
File Recursion #file #recursion
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class FileStackRec | |
| { | |
| static void Main(string[] args) | |
| { | |
| // Specify the starting folder on the command line, or in | |
| // Visual Studio in the Project > Properties > Debug pane. | |
| TraverseTree(args[0]); | |
| Console.WriteLine("Press any key"); | |
| Console.ReadKey(); | |
| } | |
| public static void TraverseTree(string root) | |
| { | |
| // Data structure to hold names of subfolders to be | |
| // examined for files. | |
| Stack<string> dirs = new Stack<string>(20); | |
| if (!System.IO.Directory.Exists(root)) | |
| { | |
| throw new ArgumentException(); | |
| } | |
| dirs.Push(root); | |
| while (dirs.Count > 0) | |
| { | |
| string currentDir = dirs.Pop(); | |
| string[] subDirs; | |
| try | |
| { | |
| subDirs = System.IO.Directory.GetDirectories(currentDir); | |
| } | |
| // An UnauthorizedAccessException exception will be thrown if we do not have | |
| // discovery permission on a folder or file. It may or may not be acceptable | |
| // to ignore the exception and continue enumerating the remaining files and | |
| // folders. It is also possible (but unlikely) that a DirectoryNotFound exception | |
| // will be raised. This will happen if currentDir has been deleted by | |
| // another application or thread after our call to Directory.Exists. The | |
| // choice of which exceptions to catch depends entirely on the specific task | |
| // you are intending to perform and also on how much you know with certainty | |
| // about the systems on which this code will run. | |
| catch (UnauthorizedAccessException e) | |
| { | |
| Console.WriteLine(e.Message); | |
| continue; | |
| } | |
| catch (System.IO.DirectoryNotFoundException e) | |
| { | |
| Console.WriteLine(e.Message); | |
| continue; | |
| } | |
| string[] files = null; | |
| try | |
| { | |
| files = System.IO.Directory.GetFiles(currentDir); | |
| } | |
| catch (UnauthorizedAccessException e) | |
| { | |
| Console.WriteLine(e.Message); | |
| continue; | |
| } | |
| catch (System.IO.DirectoryNotFoundException e) | |
| { | |
| Console.WriteLine(e.Message); | |
| continue; | |
| } | |
| // Perform the required action on each file here. | |
| // Modify this block to perform your required task. | |
| foreach (string file in files) | |
| { | |
| try | |
| { | |
| // Perform whatever action is required in your scenario. | |
| System.IO.FileInfo fi = new System.IO.FileInfo(file); | |
| Console.WriteLine("{0}: {1}, {2}", fi.Name, fi.Length, fi.CreationTime); | |
| } | |
| catch (System.IO.FileNotFoundException e) | |
| { | |
| // If file was deleted by a separate application | |
| // or thread since the call to TraverseTree() | |
| // then just continue. | |
| Console.WriteLine(e.Message); | |
| continue; | |
| } | |
| } | |
| // Push the subdirectories onto the stack for traversal. | |
| // This could also be done before handing the files. | |
| foreach (string str in subDirs) | |
| dirs.Push(str); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment