2003-11-14 Ben Maurer <bmaurer@users.sourceforge.net>
[mono.git] / mcs / class / corlib / System.IO / DirectoryInfo.cs
1 // \r
2 // System.IO.DirectoryInfo.cs \r
3 //\r
4 // Author:\r
5 //   Miguel de Icaza, miguel@ximian.com\r
6 //   Jim Richardson, develop@wtfo-guru.com\r
7 //   Dan Lewis, dihlewis@yahoo.co.uk\r
8 //\r
9 // Copyright (C) 2002 Ximian, Inc.\r
10 // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved\r
11 // \r
12 \r
13 using System;\r
14 using System.Collections;\r
15 \r
16 namespace System.IO {\r
17         \r
18         [Serializable]
19         public sealed class DirectoryInfo : FileSystemInfo {\r
20         \r
21                 public DirectoryInfo (string path) {\r
22                         CheckPath (path);\r
23                 \r
24                         OriginalPath = path;\r
25                         FullPath = Path.GetFullPath (path);\r
26                 }\r
27 \r
28                 // properties\r
29 \r
30                 public override bool Exists {\r
31                         get {\r
32                                 Refresh (false);\r
33 \r
34                                 if (stat.Attributes == MonoIO.InvalidFileAttributes)\r
35                                         return false;\r
36 \r
37                                 if ((stat.Attributes & FileAttributes.Directory) == 0)\r
38                                         return false;\r
39 \r
40                                 return true;\r
41                         }\r
42                 }\r
43 \r
44                 public override string Name {\r
45                         get {\r
46                                 string result = Path.GetFileName (FullPath);\r
47                                 if (result == null || result == "")
48                                         return FullPath;
49                                 return result;
50                         }\r
51                 }\r
52 \r
53                 public DirectoryInfo Parent {\r
54                         get {\r
55                                 string dirname = Path.GetDirectoryName (FullPath);
56                                 if (dirname == null)
57                                         return null;
58
59                                 return new DirectoryInfo (dirname);
60                         }\r
61                 }\r
62 \r
63                 public DirectoryInfo Root {\r
64                         get {\r
65                                 string root = Path.GetPathRoot (FullPath);
66                                 if (root == null)
67                                         return null;
68
69                                 return new DirectoryInfo (root);
70                         }\r
71                 }\r
72 \r
73                 // creational methods\r
74 \r
75                 public void Create () {\r
76                         Directory.CreateDirectory (FullPath);\r
77                 }\r
78 \r
79                 public DirectoryInfo CreateSubdirectory (string name) {\r
80                         string path = Path.Combine (FullPath, Path.GetFileName (name));\r
81                         Directory.CreateDirectory (path);\r
82 \r
83                         return new DirectoryInfo (path);\r
84                 }\r
85 \r
86                 // directory listing methods\r
87 \r
88                 public FileInfo [] GetFiles () {\r
89                         return GetFiles ("*");\r
90                 }\r
91 \r
92                 public FileInfo [] GetFiles (string pattern) {\r
93                         string [] names = Directory.GetFiles (FullPath, pattern);\r
94 \r
95                         ArrayList infos = new ArrayList ();\r
96                         foreach (string name in names)\r
97                                 infos.Add (new FileInfo (name));\r
98 \r
99                         return (FileInfo []) infos.ToArray (typeof (FileInfo));\r
100                 }\r
101 \r
102                 public DirectoryInfo [] GetDirectories () {\r
103                         return GetDirectories ("*");\r
104                 }\r
105 \r
106                 public DirectoryInfo [] GetDirectories (string pattern) {\r
107                         string [] names = Directory.GetDirectories (FullPath, pattern);\r
108 \r
109                         ArrayList infos = new ArrayList ();\r
110                         foreach (string name in names)\r
111                                 infos.Add (new DirectoryInfo (name));\r
112 \r
113                         return (DirectoryInfo []) infos.ToArray (typeof (DirectoryInfo));\r
114                 }\r
115 \r
116                 public FileSystemInfo [] GetFileSystemInfos () {\r
117                         return GetFileSystemInfos ("*");\r
118                 }\r
119 \r
120                 public FileSystemInfo [] GetFileSystemInfos (string pattern) {\r
121                         ArrayList infos = new ArrayList ();\r
122                         infos.AddRange (GetDirectories (pattern));\r
123                         infos.AddRange (GetFiles (pattern));\r
124 \r
125                         return (FileSystemInfo []) infos.ToArray (typeof (FileSystemInfo));\r
126                 }\r
127 \r
128                 // directory management methods\r
129 \r
130                 public override void Delete () {\r
131                         Delete (false);\r
132                 }\r
133 \r
134                 public void Delete (bool recurse) {\r
135                         Directory.Delete (FullPath, recurse);\r
136                 }\r
137 \r
138                 public void MoveTo (string dest) {\r
139                         Directory.Move (FullPath, Path.GetFullPath (dest));
140                 }\r
141 \r
142                 public override string ToString () {\r
143                         return OriginalPath;
144                 }\r
145         }\r
146 }\r