How to resolve the algorithm Walk a directory/Recursively step by step in the C# programming language
How to resolve the algorithm Walk a directory/Recursively step by step in the C# programming language
Table of Contents
Problem Statement
Walk a given directory tree and print files matching a given pattern.
Note: This task is for recursive methods. These tasks should read an entire directory tree, not a single directory.
Note: Please be careful when running any code examples found here.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Walk a directory/Recursively step by step in the C# programming language
This code prints the name of each file in a directory tree that matches a file pattern. The code does this by traversing all the subdirectories from a given root directory. It starts by creating a stack of directories to visit. The stack is initially filled with just the root directory.
The code then enters a while loop that continues until the stack is empty. In each iteration of the loop, the code pops the top directory off the stack and tries to get a list of all the files and directories in that directory. If the code doesn't have access to the directory, it skips it and continues to the next directory on the stack.
Once the code has a list of all the files and directories in the current directory, it filters the list of files by the file pattern. The code yields each file that matches the pattern, which means that the file is returned to the caller of the TraverseDirectory function.
The code continues this process until it has visited all the directories in the directory tree. After the code has visited all the directories, it prints the name of each file that it found.
Here is a breakdown of the code:
- The
TraverseDirectory
function takes two arguments: a root path and a function that takes aFileInfo
object and returns a boolean value. The function returns anIEnumerable
ofFileInfo
objects that match the pattern. - The
TraverseDirectory
function uses a stack to keep track of the directories that it has yet to visit. - The
TraverseDirectory
function uses theGetDirectories
andGetFiles
methods of theDirectoryInfo
class to get a list of all the directories and files in a directory. - The
TraverseDirectory
function uses theWhere
method of theIEnumerable
class to filter the list of files by the file pattern. - The
TraverseDirectory
function uses theyield return
statement to return each file that matches the pattern. - The
Main
function calls theTraverseDirectory
function to get a list of all the.wmv
files in theC:\Windows
directory tree. - The
Main
function prints the name of each file that was returned by theTraverseDirectory
function.
Source code in the csharp programming language
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace RosettaRecursiveDirectory
{
class Program
{
static IEnumerable<FileInfo> TraverseDirectory(string rootPath, Func<FileInfo, bool> Pattern)
{
var directoryStack = new Stack<DirectoryInfo>();
directoryStack.Push(new DirectoryInfo(rootPath));
while (directoryStack.Count > 0)
{
var dir = directoryStack.Pop();
try
{
foreach (var i in dir.GetDirectories())
directoryStack.Push(i);
}
catch (UnauthorizedAccessException) {
continue; // We don't have access to this directory, so skip it
}
foreach (var f in dir.GetFiles().Where(Pattern)) // "Pattern" is a function
yield return f;
}
}
static void Main(string[] args)
{
// Print the full path of all .wmv files that are somewhere in the C:\Windows directory or its subdirectories
foreach (var file in TraverseDirectory(@"C:\Windows", f => f.Extension == ".wmv"))
Console.WriteLine(file.FullName);
Console.WriteLine("Done.");
}
}
}
You may also check:How to resolve the algorithm Sort using a custom comparator step by step in the PARI/GP programming language
You may also check:How to resolve the algorithm Abundant odd numbers step by step in the Maple programming language
You may also check:How to resolve the algorithm Send an unknown method call step by step in the Clojure programming language
You may also check:How to resolve the algorithm Tokenize a string step by step in the LFE programming language
You may also check:How to resolve the algorithm Write to Windows event log step by step in the Ruby programming language