/// <summary> /// Changes the children list to the specified type. /// </summary> /// <typeparam name="TList">A type that implements <see cref="IList{T}" /> interface and has a public default constructor.</typeparam> public void SetChildrenListType <TList>() where TList : IList <Tree <T> >, new() { if (_children == null) { _children = new TList(); } else { if (typeof(TList).Equals(_children.GetType())) { return; } var nlist = new TList(); nlist.AddRange(_children, 0); _children = nlist; } }
/// <summary> /// Returns a list of directories under RootDirectory /// </summary> /// <param name="RootDirectory">starting directory</param> /// <param name="SearchAllDirectories">when true, all sub directories will be searched as well</param> /// <param name="Filter">filter to be done on directory. use null for no filtering</param> public static TList<string> DirectoryList(string RootDirectory, bool SearchAllDirectories, Predicate<string> Filter) { TList<string> retList = new TList<string>(); try { // create a directory info object DirectoryInfo di = new DirectoryInfo(RootDirectory); // loop through directories populating the list Parallel.ForEach(di.GetDirectories(), folder => { try { // add the folder if it passes the filter if ((Filter == null) || (Filter(folder.FullName))) { // add the folder retList.Add(folder.FullName); // get it's sub folders if (SearchAllDirectories) retList.AddRange(DirectoryList(folder.FullName, true, Filter)); } } catch (IOException) { // don't really need to do anything // user just doesn't have access } catch (UnauthorizedAccessException) { // don't really need to do anything // user just doesn't have access } catch (Exception excep) { // TODO: save to an error log somewhere // for now, write to console Console.WriteLine("Error: {0}", excep.Message); } }); } catch (IOException) { // don't really need to do anything // user just doesn't have access } catch (UnauthorizedAccessException) { // don't really need to do anything // user just doesn't have access } catch (Exception excep) { // TODO: save to an error log somewhere // for now, write to console Console.WriteLine("Error: {0}", excep.Message); } finally { // force garbage collection GC.Collect(); Thread.Sleep(10); } // return the list return retList; }