Hi,
As you probably may know, C# library has a function that allows you to get all folders and sub-folders within a certain path. Even though it’s simple and easy to use, you can face a few problems when trying to access files that for some reason are not accessible. This simply throws an exception and the application fails.
When searching for sub-folders, there is no way to get all the exceptions thrown since they can be quite a lot, so the solution is to do a ‘get folders and sub-folders’ function yourself. Note that when we simply want the folders within a path (no sub-folders) then it is possible to catch the exceptions.
The code provided below was used in my project TextFindIT.
The function below will get all folders and sub-folders within a path and will add the results to a List of strings.
1 2 3 | //Get folders in a path List<string> folders = new List<string>(); // Our list of folders where we will keep the results folders = GetAllFolders(path); // Call the function |
So the code above will just call our function and send a valid path path.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | //Returns all folders inside a folder, including sub-folders private List<string> GetAllFolders(string path) { List<string> folders = new List<string>(); // The list of results to be returned folders.Add(path); // Our first result is our path (top folder) // For each folder in our path, we will add the folder to the list, and check for sub-folders within that folder. foreach (string folder in GetFolders(path)) { folders.Add(folder); // Add the folder as a result folders.AddRange(GetAllFolders(folder).ToList()); // Get all folders and sub-folders within the folder } return folders; // Return the list of results } //Returns all folders inside a folder (top only) private string[] GetFolders(string path) { string[] folders = { }; // Array of results // Below we try to add the folders inside 'path' and catch any possible exceptions. try { folders = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly); } catch { //catch exceptions to avoid breaking the search } return folders; // Return the results } |
So basically, for each folder inside our path, we will check for sub-folders, and for each sub-folder we will also check for sub-folders, and so on…
Notice the line folders.AddRange(GetAllFolders(folder).ToList());. We are calling the function GetAllFolders while still inside of that same function. This is called Recursion. Also, because GetAllFolders returns a List of strings with the results, we must do .AddRange(...) to add to our main List of strings the entire list of results (i.e. add a List to a List).
In the second function, we just put in an array all the folders inside path by doing Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly); while catching any possible exception. path is our current path, * is the search pattern (in this case it’s anything), and the last parameter SearchOption.TopDirectoryOnly is our search options (top only). Because we are not trying to go for sub-folders it is possible to do this (catch the exceptions), otherwise it wouldn’t.
And I guess that’s basically it.
Hope you find it useful.
