* DirectoryInfo.cs:
[mono.git] / mcs / class / corlib / System.IO / FileInfo.cs
1 //------------------------------------------------------------------------------\r
2 // \r
3 // System.IO.FileInfo.cs \r
4 //\r
5 // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved\r
6 // \r
7 // Author:         Jim Richardson, develop@wtfo-guru.com\r
8 //                 Dan Lewis (dihlewis@yahoo.co.uk)\r
9 // Created:        Monday, August 13, 2001 \r
10 //\r
11 //------------------------------------------------------------------------------\r
12 \r
13 using System;\r
14 \r
15 namespace System.IO {\r
16 \r
17         [Serializable]\r
18         public sealed class FileInfo : FileSystemInfo {\r
19         \r
20 \r
21                 private bool exists;\r
22 \r
23                 public FileInfo (string path) {\r
24                         CheckPath (path);\r
25                 \r
26                         OriginalPath = path;\r
27                         FullPath = Path.GetFullPath (path);\r
28                 }\r
29                 \r
30                 internal override void InternalRefresh ()\r
31                 {\r
32                         exists = File.Exists (FullPath);\r
33                 }\r
34 \r
35 \r
36                 // public properties\r
37 \r
38                 public override bool Exists {\r
39                         get {\r
40                                 Refresh (false);\r
41 \r
42                                 if (stat.Attributes == MonoIO.InvalidFileAttributes)\r
43                                         return false;\r
44 \r
45                                 if ((stat.Attributes & FileAttributes.Directory) != 0)\r
46                                         return false;\r
47 \r
48                                 return exists;\r
49                         }\r
50                 }\r
51 \r
52                 public override string Name {\r
53                         get {\r
54                                 return Path.GetFileName (FullPath);\r
55                         }\r
56                 }\r
57 \r
58                 public long Length {\r
59                         get {\r
60                                 if (!Exists)\r
61                                         throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".");\r
62 \r
63                                 return stat.Length;\r
64                         }\r
65                 }\r
66 \r
67                 public string DirectoryName {\r
68                         get {\r
69                                 return Path.GetDirectoryName (FullPath);\r
70                         }\r
71                 }\r
72 \r
73                 public DirectoryInfo Directory {\r
74                         get {\r
75                                 return new DirectoryInfo (DirectoryName);\r
76                         }\r
77                 }\r
78 \r
79                 // streamreader methods\r
80 \r
81                 public StreamReader OpenText () {\r
82                         return new StreamReader (Open (FileMode.Open, FileAccess.Read));\r
83                 }\r
84 \r
85                 public StreamWriter CreateText () {\r
86                         return new StreamWriter (Open (FileMode.Create, FileAccess.Write));\r
87                 }\r
88                 \r
89                 public StreamWriter AppendText () {\r
90                         return new StreamWriter (Open (FileMode.Append, FileAccess.Write));\r
91                 }\r
92 \r
93                 // filestream methods\r
94 \r
95                 public FileStream Create ()\r
96                 {\r
97                         return File.Create (FullPath);\r
98                 }\r
99                 \r
100                 \r
101                 public FileStream OpenRead () {\r
102                         return Open (FileMode.Open, FileAccess.Read);\r
103                 }\r
104 \r
105                 public FileStream OpenWrite () {\r
106                         return Open (FileMode.OpenOrCreate, FileAccess.Write);\r
107                 }\r
108 \r
109                 public FileStream Open (FileMode mode) {\r
110                         return Open (mode, FileAccess.ReadWrite);\r
111                 }\r
112 \r
113                 public FileStream Open (FileMode mode, FileAccess access) {\r
114                         return Open (mode, access, FileShare.None);\r
115                 }\r
116 \r
117                 public FileStream Open (FileMode mode, FileAccess access, FileShare share) {\r
118                         return new FileStream (FullPath, mode, access, share);\r
119                 }\r
120 \r
121                 // file methods\r
122 \r
123                 public override void Delete () {\r
124                         MonoIOError error;\r
125                                                 \r
126                         if (!MonoIO.Exists (FullPath, out error)) {\r
127                                 // a weird MS.NET behaviour\r
128                                 return;\r
129                         }\r
130 \r
131                         if (MonoIO.ExistsDirectory (FullPath, out error)) {\r
132                                 throw new UnauthorizedAccessException ("Access to the path \"" + FullPath + "\" is denied.");\r
133                         }\r
134                         \r
135                         if (!MonoIO.DeleteFile (FullPath, out error)) {\r
136                                 throw MonoIO.GetException (OriginalPath,\r
137                                                            error);\r
138                         }\r
139                 }\r
140                 \r
141                 public void MoveTo (string dest) {\r
142 \r
143                         if (dest == null)\r
144                                 throw new ArgumentNullException ();\r
145 \r
146                         if (dest == Name || dir == FullName)\r
147                                 return;\r
148 \r
149                         MonoIOError error;\r
150                         if (MonoIO.Exists (dest, out error) ||\r
151                                 MonoIO.ExistsDirectory (dest, out error))\r
152                                 throw new IOException ();\r
153                         File.Move (FullPath, dest);\r
154                         this.FullPath = Path.GetFullPath (dest);\r
155                 }\r
156 \r
157                 public FileInfo CopyTo (string path) {\r
158                         return CopyTo (path, false);\r
159                 }\r
160 \r
161                 public FileInfo CopyTo (string path, bool overwrite) {\r
162                         string dest = Path.GetFullPath (path);\r
163 \r
164                         if (overwrite && File.Exists (path))\r
165                                 File.Delete (path);\r
166 \r
167                         File.Copy (FullPath, dest);\r
168                 \r
169                         return new FileInfo (dest);\r
170                 }\r
171 \r
172                 public override string ToString () {\r
173                         return Name;\r
174                 }\r
175         }\r
176 }\r