X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.IO%2FDirectoryInfo.cs;h=ce558743516117060aec9c27bc44a691bcf3f713;hb=b52c963187c59fd167cfde556dfd4304f8ded041;hp=0e214a0486f59126ce27d8531cabea5803ed07ac;hpb=2d23bfcbce7a3f7e54dcd5911adb88b244baca35;p=mono.git diff --git a/mcs/class/corlib/System.IO/DirectoryInfo.cs b/mcs/class/corlib/System.IO/DirectoryInfo.cs index 0e214a0486f..ce558743516 100644 --- a/mcs/class/corlib/System.IO/DirectoryInfo.cs +++ b/mcs/class/corlib/System.IO/DirectoryInfo.cs @@ -37,9 +37,7 @@ using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Security; using System.Text; -#if !MOONLIGHT using System.Security.AccessControl; -#endif namespace System.IO { @@ -50,11 +48,6 @@ namespace System.IO { private string current; private string parent; -#if MOONLIGHT - internal DirectoryInfo () - { - } -#endif public DirectoryInfo (string path) : this (path, false) { } @@ -263,6 +256,8 @@ namespace System.IO { throw new ArgumentException ("An empty file name is not valid.", "destDirName"); Directory.Move (FullPath, Path.GetFullPath (destDirName)); + FullPath = OriginalPath = destDirName; + Initialize (); } public override string ToString () @@ -270,30 +265,17 @@ namespace System.IO { return OriginalPath; } -#if !MOONLIGHT public DirectoryInfo[] GetDirectories (string searchPattern, SearchOption searchOption) { - switch (searchOption) { - case SearchOption.TopDirectoryOnly: - return GetDirectories (searchPattern); - case SearchOption.AllDirectories: - Queue workq = new Queue(GetDirectories(searchPattern)); - Queue doneq = new Queue(); - while (workq.Count > 0) - { - DirectoryInfo cinfo = (DirectoryInfo) workq.Dequeue(); - DirectoryInfo[] cinfoDirs = cinfo.GetDirectories(searchPattern); - 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); + //NULL-check of searchPattern is done in Directory.GetDirectories + string [] names = Directory.GetDirectories (FullPath, searchPattern, searchOption); + //Convert the names to DirectoryInfo instances + DirectoryInfo[] infos = new DirectoryInfo [names.Length]; + for (int i = 0; i EnumerateDirectories () { @@ -391,6 +367,14 @@ namespace System.IO { } public IEnumerable EnumerateDirectories (string searchPattern, SearchOption searchOption) + { + if (searchPattern == null) + throw new ArgumentNullException ("searchPattern"); + + return CreateEnumerateDirectoriesIterator (searchPattern, searchOption); + } + + IEnumerable CreateEnumerateDirectoriesIterator (string searchPattern, SearchOption searchOption) { foreach (string name in Directory.EnumerateDirectories (FullPath, searchPattern, searchOption)) yield return new DirectoryInfo (name); @@ -407,6 +391,14 @@ namespace System.IO { } public IEnumerable EnumerateFiles (string searchPattern, SearchOption searchOption) + { + if (searchPattern == null) + throw new ArgumentNullException ("searchPattern"); + + return CreateEnumerateFilesIterator (searchPattern, searchOption); + } + + IEnumerable CreateEnumerateFilesIterator (string searchPattern, SearchOption searchOption) { foreach (string name in Directory.EnumerateFiles (FullPath, searchPattern, searchOption)) yield return new FileInfo (name);