TextFindIT 1.5 is now available for download.
Official post at LINK
Log:
1.5
-> Now working for PDF files (using colorpilot.com/pdflibrary.html);
-> You can now use the ‘Del’ key to remove an extension from the list;
-> No more case sensitive/non-case sensitive problems with the extensions;
-> Keywords are now separated by commas instead of spaces;
-> New icon made freely available by Artua.com;
-> Some graphical improvements;
-> Installation is now required.
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.