2002-05-07 Mike Gray <mikeg_us@hotmail.com>
[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]
18         public sealed class FileInfo : FileSystemInfo {\r
19         \r
20                 public FileInfo (string path) {\r
21                         CheckPath (path);\r
22                 \r
23                         OriginalPath = path;\r
24                         FullPath = Path.GetFullPath (path);\r
25                 }\r
26 \r
27                 // public properties\r
28 \r
29                 public override bool Exists {\r
30                         get {\r
31                                 Refresh (false);\r
32 \r
33                                 if (stat.Attributes == MonoIO.InvalidFileAttributes)\r
34                                         return false;\r
35 \r
36                                 if ((stat.Attributes & FileAttributes.Directory) != 0)\r
37                                         return false;\r
38 \r
39                                 return true;\r
40                         }\r
41                 }\r
42 \r
43                 public override string Name {\r
44                         get {\r
45                                 return Path.GetFileName (FullPath);\r
46                         }\r
47                 }\r
48 \r
49                 public long Length {\r
50                         get {\r
51                                 if (!Exists)\r
52                                         throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".");\r
53 \r
54                                 return stat.Length;\r
55                         }\r
56                 }\r
57 \r
58                 public string DirectoryName {\r
59                         get {\r
60                                 return Path.GetDirectoryName (FullPath);\r
61                         }\r
62                 }\r
63 \r
64                 public DirectoryInfo Directory {\r
65                         get {\r
66                                 return new DirectoryInfo (DirectoryName);\r
67                         }\r
68                 }\r
69 \r
70                 // streamreader methods\r
71 \r
72                 public StreamReader OpenText () {\r
73                         return new StreamReader (Open (FileMode.Open, FileAccess.Read));\r
74                 }\r
75 \r
76                 public StreamWriter CreateText () {\r
77                         return new StreamWriter (Open (FileMode.Create, FileAccess.Write));\r
78                 }\r
79                 \r
80                 public StreamWriter AppendText () {\r
81                         return new StreamWriter (Open (FileMode.Append, FileAccess.Write));\r
82                 }\r
83 \r
84                 // filestream methods\r
85
86                 public FileStream Create ()
87                 {
88                         return File.Create (FullPath);
89                 }
90                 
91                 \r
92                 public FileStream OpenRead () {\r
93                         return Open (FileMode.Open, FileAccess.Read);\r
94                 }\r
95 \r
96                 public FileStream OpenWrite () {\r
97                         return Open (FileMode.OpenOrCreate, FileAccess.Write);\r
98                 }\r
99 \r
100                 public FileStream Open (FileMode mode) {\r
101                         return Open (mode, FileAccess.ReadWrite);\r
102                 }\r
103 \r
104                 public FileStream Open (FileMode mode, FileAccess access) {\r
105                         return Open (mode, access, FileShare.None);\r
106                 }\r
107 \r
108                 public FileStream Open (FileMode mode, FileAccess access, FileShare share) {\r
109                         return new FileStream (FullPath, mode, access, share);\r
110                 }\r
111 \r
112                 // file methods\r
113 \r
114                 public override void Delete () {\r
115                         if (!MonoIO.Exists (FullPath))          // a weird MS.NET behaviour\r
116                                 return;\r
117                 \r
118                         if (!MonoIO.DeleteFile (FullPath))\r
119                                 throw MonoIO.GetException (OriginalPath);\r
120                 }\r
121                 \r
122                 public void MoveTo (string dest) {\r
123                         File.Move (FullPath, dest);\r
124                 }\r
125 \r
126                 public FileInfo CopyTo (string path) {\r
127                         return CopyTo (path, false);\r
128                 }\r
129 \r
130                 public FileInfo CopyTo (string path, bool overwrite) {\r
131                         string dest = Path.GetFullPath (path);\r
132                         File.Copy (FullPath, dest);\r
133                 \r
134                         return new FileInfo (dest);\r
135                 }\r
136 \r
137                 public override string ToString () {\r
138                         return OriginalPath;\r
139                 }\r
140         }\r
141 }\r