#if NET_2_0
// additional search methods
- [MonoTODO ("AllDirectories isn't implemented")]
public DirectoryInfo[] GetDirectories (string pattern, SearchOption searchOption)
{
switch (searchOption) {
case SearchOption.TopDirectoryOnly:
return GetDirectories (pattern);
case SearchOption.AllDirectories:
- throw new NotImplementedException ();
+ Queue workq = new Queue(GetDirectories(pattern));
+ Queue doneq = new Queue();
+ while (workq.Count > 0)
+ {
+ DirectoryInfo cinfo = (DirectoryInfo) workq.Dequeue();
+ DirectoryInfo[] cinfoDirs = cinfo.GetDirectories(pattern);
+ foreach (DirectoryInfo i in cinfoDirs) workq.Enqueue(i);
+ doneq.Enqueue(cinfo);
+ }
+
+ DirectoryInfo[] infos = new DirectoryInfo[doneq.Count];
+ doneq.CopyTo(infos, 0);
+ return infos;
default:
string msg = Locale.GetText ("Invalid enum value '{0}' for '{1}'.", searchOption, "SearchOption");
throw new ArgumentOutOfRangeException ("searchOption", msg);
}
}
- [MonoTODO ("AllDirectories isn't implemented")]
+ internal int GetFilesSubdirs (ArrayList l, string pattern)
+ {
+ int count;
+ FileInfo [] thisdir = null;
+
+ try {
+ thisdir = GetFiles (pattern);
+ } catch (System.UnauthorizedAccessException){
+ return 0;
+ }
+
+ count = thisdir.Length;
+ l.Add (thisdir);
+
+ foreach (DirectoryInfo subdir in GetDirectories ()){
+ count += subdir.GetFilesSubdirs (l, pattern);
+ }
+ return count;
+ }
+
public FileInfo[] GetFiles (string pattern, SearchOption searchOption)
{
switch (searchOption) {
case SearchOption.TopDirectoryOnly:
return GetFiles (pattern);
- case SearchOption.AllDirectories:
- throw new NotImplementedException ();
+ case SearchOption.AllDirectories: {
+ ArrayList groups = new ArrayList ();
+ int count = GetFilesSubdirs (groups, pattern);
+ int current = 0;
+
+ FileInfo [] all = new FileInfo [count];
+ foreach (FileInfo [] p in groups){
+ p.CopyTo (all, current);
+ current += p.Length;
+ }
+ return all;
+ }
default:
string msg = Locale.GetText ("Invalid enum value '{0}' for '{1}'.", searchOption, "SearchOption");
throw new ArgumentOutOfRangeException ("searchOption", msg);