Recursing through a directory/filesystem using C#
This will teach you how to recurse through a directory/filesystem using C#..
The problem comes from not knowing how many folders/files exist.
One folder can have many folders inside it, those folders can each have many folders inside it.
I will show you how to recurse through the filesystem and explain it so that you UNDERSTAND it. This isnt for copy-paste.
We will start with a C# console application and pick a path, we'll use C: for this.
First of all, we're going to need the IO namespace. The IO namespace has access to File and Directory methods.
At the top add these lines:
using System; //Just so we can use the shortcut Console instead of System.Console using System.IO; //Gives us access to file, directory objects
Now, in our "main" method, we are going to write the following:
string path="C:/"; //set the root path we want to recurse through.
//check if the directory exists
if(Directory.Exists(path)){
DirectoryInfo di=new DirectoryInfo(path);
//based on a path, this object will give you directory information about that directory
printDirectories(di);
//this method will actually go through our directories and print out information
}else{
Console.WriteLine("Directory does not exist. Press Enter to exit");
Console.ReadLine(); //when you hit return the program will terminate.
}
Now we will write the print directories method. It takes a DirectoryInfo object as a parameter and will use that to recurse through the file system.
//declared as static because were a console app, this can be private in your application if it a utility method.
2 Important methods we're going to be looking at are in the DirectoryInfo object. They are
public FileInfo[] directoryInfoObject.GetFiles() //returns an array of FileInfo objects
public DirectoryInfo[] directoryInfoObject.GetDirectories() //returns an array of DirectoryInfo objects
static void printDirectories(DirectoryInfo di){
foreach(FileInfo fi in di.GetFiles()){
//we are going to run code for each file
Console.WriteLine(fi.FullName); //this prints out the full file name including the path
}
//now that we process this directory for files, we do the same for every subdirectory in this directory
foreach(DirectoryInfo subDir in di.GetDirectories()){
//we are going to call the printDirectories method, with the subdirectory as the root.
//its files will be processed, then its subdirectories will be checked
//this happens foreach Directory in the current directory
printDirectories(subDir); //recurse
}
}
Thats simple recursion. The most common use of this is for populating a treeview and another use that comes to mind is file searching. Keep an eye out for the next tutorial: Populating a Treeview from a file system!