#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<names.Length; ++i){
+ string name = names[i];
+ infos [i] = new DirectoryInfo (name);
}
+ return infos;
}
internal int GetFilesSubdirs (ArrayList l, string pattern)
return CreateSubdirectory (path);
}
- [MonoNotSupported ("DirectorySecurity isn't implemented")]
public DirectorySecurity GetAccessControl ()
{
- throw new UnauthorizedAccessException ();
+ return Directory.GetAccessControl (FullPath);
}
- [MonoNotSupported ("DirectorySecurity isn't implemented")]
public DirectorySecurity GetAccessControl (AccessControlSections includeSections)
{
- throw new UnauthorizedAccessException ();
+ return Directory.GetAccessControl (FullPath, includeSections);
}
- [MonoLimitation ("DirectorySecurity isn't implemented")]
public void SetAccessControl (DirectorySecurity directorySecurity)
{
- if (directorySecurity != null)
- throw new ArgumentNullException ("directorySecurity");
- throw new UnauthorizedAccessException ();
+ Directory.SetAccessControl (FullPath, directorySecurity);
}
#endif
}
public IEnumerable<DirectoryInfo> EnumerateDirectories (string searchPattern, SearchOption searchOption)
+ {
+ if (searchPattern == null)
+ throw new ArgumentNullException ("searchPattern");
+
+ return CreateEnumerateDirectoriesIterator (searchPattern, searchOption);
+ }
+
+ IEnumerable<DirectoryInfo> CreateEnumerateDirectoriesIterator (string searchPattern, SearchOption searchOption)
{
foreach (string name in Directory.EnumerateDirectories (FullPath, searchPattern, searchOption))
yield return new DirectoryInfo (name);
}
public IEnumerable<FileInfo> EnumerateFiles (string searchPattern, SearchOption searchOption)
+ {
+ if (searchPattern == null)
+ throw new ArgumentNullException ("searchPattern");
+
+ return CreateEnumerateFilesIterator (searchPattern, searchOption);
+ }
+
+ IEnumerable<FileInfo> CreateEnumerateFilesIterator (string searchPattern, SearchOption searchOption)
{
foreach (string name in Directory.EnumerateFiles (FullPath, searchPattern, searchOption))
yield return new FileInfo (name);