Two usefull snippets, if you need to do a quick file search, here a recursive and a breadth first implementation (ignored the not-authorized-exception):
(took me only 2 mins, love .Net 🙂
Depth First Implementation:
static string[] FindFile_DepthFirst(string directoryName, string fileName) { return Directory.GetFiles(directoryName, fileName, SearchOption.AllDirectories); } |
Breadth First Implementation:
public string[] FindFile_BreadthFirst(string directoryName, string fileName) { string[] files = new string[0]; ArrayList directories = new ArrayList(); ArrayList foundfiles = new ArrayList(); directories.Add(directoryName); while (directories.Count > 0) { string n = (string)directories[0]; try{//ignore not-authorized-exception string[] foundfiles1 = Directory.GetFiles(n, fileName, SearchOption.TopDirectoryOnly); if (foundfiles1 != null) foundfiles.AddRange(foundfiles1); }catch{} try{//ignore not-authorized-exception string[] subdirectories = Directory.GetDirectories(n); if (subdirectories != null) directories.AddRange(subdirectories); }catch{} directories.RemoveAt(0); } return (string[])foundfiles.ToArray(typeof(string)); } |
In my case, i used the breadth first search with a synchronized ArrayList and added found results in this list, as soon as i found them, and with another thread i kept the GUI updated. Here how i created the threadsafe arraylist in case you cant wait for the entire search results 😀 :
ArrayList foundfiles1 = ArrayList.Synchronized(new ArrayList()); |
Also see – How to Update GUI Control From Non-GUI-Thread Without Marshalling – for updating GUI from a second Thread.