X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.IO%2FFileInfo.cs;h=3345f61dc79dd7ea66f06fd38a75affae389c49a;hb=2cd8400db6bc765bcd370cf054790ddc26d019b8;hp=ed032372939a3312e6014251d84c849c95758fc8;hpb=6d11b05caa00f7cf5cc349a382b5cc022f84f3b2;p=mono.git
diff --git a/mcs/class/corlib/System.IO/FileInfo.cs b/mcs/class/corlib/System.IO/FileInfo.cs
index ed032372939..3345f61dc79 100644
--- a/mcs/class/corlib/System.IO/FileInfo.cs
+++ b/mcs/class/corlib/System.IO/FileInfo.cs
@@ -5,191 +5,195 @@
// Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved
//
// Author: Jim Richardson, develop@wtfo-guru.com
+// Dan Lewis (dihlewis@yahoo.co.uk)
// Created: Monday, August 13, 2001
//
//------------------------------------------------------------------------------
-
-using System;
-using System.PAL;
-using System.Diagnostics;
-using System.Security.Permissions;
-
-namespace System.IO
-{
- ///
- ///
- ///
- public sealed class FileInfo : FileSystemInfo
- {
- private OpSys _os = Platform.OS;
- public FileInfo(string fileName)
- {
- CheckArgument.Path(fileName, false);
- //LAMESPEC: Does not throw security exception in constructor
- OriginalPath = fileName;
- }
-
- private bool existsOnDisk(bool exNotFound, bool exIsDirectory)
- {
- bool bRetCode;
-
- try
- {
- Refresh();
- if((getAttributes() & FileAttributes.Directory) != 0)
- {
- if(exIsDirectory)
- {
- throw new UnauthorizedAccessException();
- }
- bRetCode = false;
- }
- else
- {
- bRetCode = true;
- }
- }
- catch(ArgumentException ex)
- {
- Debug.WriteLine(ex); // eliminates not used warning
- if(exNotFound)
- {
- throw new FileNotFoundException();
- }
- bRetCode = false;
- }
- return bRetCode;
- }
-
- public override bool Exists
- {
- get
- {
- return existsOnDisk(false, false);
- }
- }
-
- public override string Name
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace System.IO {
+
+ [Serializable]
+ public sealed class FileInfo : FileSystemInfo {
+
+
+ private bool exists;
+
+ public FileInfo (string path) {
+ CheckPath (path);
+
+ OriginalPath = path;
+ FullPath = Path.GetFullPath (path);
+ }
+
+ internal override void InternalRefresh ()
{
- get
- {
- return Path.GetFileName(getPathName());
+ exists = File.Exists (FullPath);
+ }
+
+
+ // public properties
+
+ public override bool Exists {
+ get {
+ Refresh (false);
+
+ if (stat.Attributes == MonoIO.InvalidFileAttributes)
+ return false;
+
+ if ((stat.Attributes & FileAttributes.Directory) != 0)
+ return false;
+
+ return exists;
}
}
- ///
- /// Gets the parent directory info
- ///
- public DirectoryInfo Directory
- {
- get
- {
- return new DirectoryInfo(Path.GetDirectoryName(getPathName()));
+ public override string Name {
+ get {
+ return Path.GetFileName (FullPath);
}
}
- ///
- /// Get the path of the file
- ///
- public string DirectoryName
- {
- get
- {
- return Path.GetDirectoryName(getPathName());
+ public long Length {
+ get {
+ if (!Exists)
+ throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".", OriginalPath);
+
+ return stat.Length;
}
}
- ///
- /// Get the length of the file
- ///
- public long Length
- {
- get
- {
- try
- {
- Refresh();
- }
- catch(ArgumentException ex)
- {
- Debug.WriteLine(ex); // eliminates not used compiler warning
- throw new FileNotFoundException();
- }
- return _os.FileLength(getPathName());
+ public string DirectoryName {
+ get {
+ return Path.GetDirectoryName (FullPath);
}
}
-
- public StreamWriter AppendText()
- { // TODO: verify using correct FileMode here might be Create & Append
- return new StreamWriter(Open(FileMode.Append, FileAccess.Write));
+
+ public DirectoryInfo Directory {
+ get {
+ return new DirectoryInfo (DirectoryName);
+ }
}
-
- public FileStream Create()
- {
- // TODO: verify using correct FileMode here
- return Open(FileMode.OpenOrCreate, FileAccess.ReadWrite);
+
+ // streamreader methods
+
+ public StreamReader OpenText () {
+ return new StreamReader (Open (FileMode.Open, FileAccess.Read));
}
- public StreamWriter CreateText()
- { //TODO: According to doc even CreateText throws a file not found ex
- // sounds suspicious so i'll have to check it out later
- //existsOnDisk(true, true); // throw not found, is directory
- return new StreamWriter(Open(FileMode.Create, FileAccess.Write));
+ public StreamWriter CreateText () {
+ return new StreamWriter (Open (FileMode.Create, FileAccess.Write));
}
- public FileStream Open(FileMode mode)
- {
- return Open(mode, FileAccess.ReadWrite);
+ public StreamWriter AppendText () {
+ return new StreamWriter (Open (FileMode.Append, FileAccess.Write));
}
- public FileStream Open(FileMode mode, FileAccess access)
+ // filestream methods
+
+ public FileStream Create ()
{
- return Open(mode, access, FileShare.None);
- }
-
- public FileStream Open(FileMode mode, FileAccess access, FileShare share)
- {
- bool bExists = existsOnDisk(false, true); // throw is directory;
- string path = getPathName();
- CheckPermission.ModeAccess(mode, access, path, bExists);
- return new FileStream(path, mode, access, share);
+ return File.Create (FullPath);
+ }
+
+
+ public FileStream OpenRead () {
+ return Open (FileMode.Open, FileAccess.Read);
}
- public FileStream OpenRead()
- { // TODO: find out what default share should be
- return Open(FileMode.Open, FileAccess.Read, FileShare.Read);
+ public FileStream OpenWrite () {
+ return Open (FileMode.OpenOrCreate, FileAccess.Write);
}
- public StreamReader OpenText()
- { // TODO: verify mode and access values
- return new StreamReader(Open(FileMode.OpenOrCreate, FileAccess.ReadWrite));
+ public FileStream Open (FileMode mode) {
+ return Open (mode, FileAccess.ReadWrite);
}
- public FileStream OpenWrite()
- {
- return Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
+ public FileStream Open (FileMode mode, FileAccess access) {
+ return Open (mode, access, FileShare.None);
}
- public FileInfo CopyTo(string destFile)
- {
- return CopyTo(destFile, false);
+ public FileStream Open (FileMode mode, FileAccess access, FileShare share) {
+ return new FileStream (FullPath, mode, access, share);
+ }
+
+ // file methods
+
+ public override void Delete () {
+ MonoIOError error;
+
+ if (!MonoIO.Exists (FullPath, out error)) {
+ // a weird MS.NET behaviour
+ return;
+ }
+
+ if (MonoIO.ExistsDirectory (FullPath, out error)) {
+ throw new UnauthorizedAccessException ("Access to the path \"" + FullPath + "\" is denied.");
+ }
+
+ if (!MonoIO.DeleteFile (FullPath, out error)) {
+ throw MonoIO.GetException (OriginalPath,
+ error);
+ }
+ }
+
+ public void MoveTo (string dest) {
+
+ if (dest == null)
+ throw new ArgumentNullException ();
+
+ if (dest == Name || dest == FullName)
+ return;
+
+ MonoIOError error;
+ if (MonoIO.Exists (dest, out error) ||
+ MonoIO.ExistsDirectory (dest, out error))
+ throw new IOException ();
+ File.Move (FullPath, dest);
+ this.FullPath = Path.GetFullPath (dest);
}
- public FileInfo CopyTo(string destFile, bool bOverwrite)
- { // TODO: Implement
- return null;
+ public FileInfo CopyTo (string path) {
+ return CopyTo (path, false);
}
- public override void Delete()
- {
- existsOnDisk(true, true); // throw not found, is directory
- CheckPermission.Demand(FileIOPermissionAccess.AllAccess, getPathName());
- _os.DeleteFile(getPathName());
+ public FileInfo CopyTo (string path, bool overwrite) {
+ string dest = Path.GetFullPath (path);
+
+ if (overwrite && File.Exists (path))
+ File.Delete (path);
+
+ File.Copy (FullPath, dest);
+
+ return new FileInfo (dest);
}
- public void MoveTo(string destName)
- { // TODO: Implement
+ public override string ToString () {
+ return OriginalPath;
}
}
}