2008-01-15 Stephane Delcroix <sdelcroix@novell.com>
[mono.git] / mcs / class / corlib / System.IO / Directory.cs
index 7b3efcc6976cfbe3c636b0ca1989d79fccefcdfc..dfc6049f1bc8f2bfcfce0e246f80464f95a30630 100644 (file)
@@ -42,9 +42,16 @@ using System.Collections;
 using System.Security;
 using System.Security.Permissions;
 using System.Text;
+#if NET_2_0
+using System.Security.AccessControl;
+using System.Runtime.InteropServices;
+#endif
 
 namespace System.IO
 {
+#if NET_2_0
+       [ComVisible (true)]
+#endif
        public
 #if NET_2_0
        static
@@ -85,6 +92,14 @@ namespace System.IO
                        return CreateDirectoriesInternal (path);
                }
 
+#if NET_2_0
+               [MonoTODO ("DirectorySecurity not implemented")]
+               public static DirectoryInfo CreateDirectory (string path, DirectorySecurity directorySecurity)
+               {
+                       return(CreateDirectory (path));
+               }
+#endif
+
                static DirectoryInfo CreateDirectoriesInternal (string path)
                {
                        if (SecurityManager.SecurityEnabled) {
@@ -140,8 +155,7 @@ namespace System.IO
                                 */
                                success = MonoIO.DeleteFile (path, out error);
                        } else {
-                               success = MonoIO.RemoveDirectory (path,
-                                                                 out error);
+                               success = MonoIO.RemoveDirectory (path, out error);
                        }
                        
                        if (!success) {
@@ -151,7 +165,7 @@ namespace System.IO
                                 * So maybe this could be handled somewhere else?
                                 */
                                if (error == MonoIOError.ERROR_FILE_NOT_FOUND) 
-                                       throw new DirectoryNotFoundException ("Directory '" + path + "' doesnt exists.");
+                                       throw new DirectoryNotFoundException ("Directory '" + path + "' does not exist");
                                else
                                        throw MonoIO.GetException (path, error);
                        }
@@ -215,12 +229,12 @@ namespace System.IO
                {
                        return File.GetLastAccessTime (path);
                }
-               
+
                public static DateTime GetLastAccessTimeUtc (string path)
                {
                        return GetLastAccessTime (path).ToUniversalTime ();
                }
-                     
+
                public static DateTime GetLastWriteTime (string path)
                {
                        return File.GetLastWriteTime (path);
@@ -334,15 +348,15 @@ namespace System.IO
                static bool IsRootDirectory (string path)
                {
                        // Unix
-                      if (Path.DirectorySeparatorChar == '/' && path == "/")
-                              return true;
+                       if (Path.DirectorySeparatorChar == '/' && path == "/")
+                               return true;
 
-                      // Windows
-                      if (Path.DirectorySeparatorChar == '\\')
-                              if (path.Length == 3 && path.EndsWith (":\\"))
-                                      return true;
+                       // Windows
+                       if (Path.DirectorySeparatorChar == '\\')
+                               if (path.Length == 3 && path.EndsWith (":\\"))
+                                       return true;
 
-                      return false;
+                       return false;
                }
 
                public static DirectoryInfo GetParent (string path)
@@ -365,34 +379,41 @@ namespace System.IO
                        return new DirectoryInfo (parent_name);
                }
 
-               public static void Move (string src, string dest)
+               public static void Move (string sourceDirName, string destDirName)
                {
-                       if (src == null)
-                               throw new ArgumentNullException ("src");
+                       if (sourceDirName == null)
+                               throw new ArgumentNullException ("sourceDirName");
 
-                       if (dest == null)
-                               throw new ArgumentNullException ("dest");
+                       if (destDirName == null)
+                               throw new ArgumentNullException ("destDirName");
 
-                       if (src.Trim () == "" || src.IndexOfAny (Path.InvalidPathChars) != -1)
-                               throw new ArgumentException ("Invalid source directory name: " + src, "src");
+                       if (sourceDirName.Trim () == "" || sourceDirName.IndexOfAny (Path.InvalidPathChars) != -1)
+                               throw new ArgumentException ("Invalid source directory name: " + sourceDirName, "sourceDirName");
 
-                       if (dest.Trim () == "" || dest.IndexOfAny (Path.InvalidPathChars) != -1)
-                               throw new ArgumentException ("Invalid target directory name: " + dest, "dest");
+                       if (destDirName.Trim () == "" || destDirName.IndexOfAny (Path.InvalidPathChars) != -1)
+                               throw new ArgumentException ("Invalid target directory name: " + destDirName, "destDirName");
 
-                       if (src == dest)
-                               throw new IOException ("Source directory cannot be same as a target directory.");
+                       if (sourceDirName == destDirName)
+                               throw new IOException ("Source and destination path must be different.");
 
-                       if (Exists (dest))
-                               throw new IOException (dest + " already exists.");
+                       if (Exists (destDirName))
+                               throw new IOException (destDirName + " already exists.");
 
-                       if (!Exists (src))
-                               throw new DirectoryNotFoundException (src + " does not exist");
+                       if (!Exists (sourceDirName) && !File.Exists (sourceDirName))
+                               throw new DirectoryNotFoundException (sourceDirName + " does not exist");
 
                        MonoIOError error;
-                       if (!MonoIO.MoveFile (src, dest, out error))
+                       if (!MonoIO.MoveFile (sourceDirName, destDirName, out error))
                                throw MonoIO.GetException (error);
                }
 
+#if NET_2_0
+               public static void SetAccessControl (string path, DirectorySecurity directorySecurity)
+               {
+                       throw new NotImplementedException ();
+               }
+#endif
+
                public static void SetCreationTime (string path, DateTime creation_time)
                {
                        File.SetCreationTime (path, creation_time);
@@ -500,12 +521,26 @@ namespace System.IO
                                throw new ArgumentException ("Path is invalid", "path");
                        }
 
-                       string [] result = MonoIO.GetFileSystemEntries (wildpath, pattern, (int) attrs, (int) mask, out error);
+                       string path_with_pattern = Path.Combine (wildpath, pattern);
+                       string [] result = MonoIO.GetFileSystemEntries (path, path_with_pattern, (int) attrs, (int) mask, out error);
                        if (error != 0)
                                throw MonoIO.GetException (wildpath, error);
-
+                       
                        return result;
                }
+
+#if NET_2_0
+               [MonoNotSupported ("DirectorySecurity isn't implemented")]
+               public static DirectorySecurity GetAccessControl (string path, AccessControlSections includeSections)
+               {
+                       throw new PlatformNotSupportedException ();
+               }
+
+               [MonoNotSupported ("DirectorySecurity isn't implemented")]
+               public static DirectorySecurity GetAccessControl (string path)
+               {
+                       throw new PlatformNotSupportedException ();
+               }
+#endif
        }
 }
-