-//------------------------------------------------------------------------------\r
-// \r
-// System.IO.FileInfo.cs \r
-//\r
-// Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved\r
-// \r
-// Author: Jim Richardson, develop@wtfo-guru.com\r
-// Dan Lewis (dihlewis@yahoo.co.uk)\r
-// Created: Monday, August 13, 2001 \r
-//\r
-//------------------------------------------------------------------------------\r
-\r
-using System;\r
-\r
-namespace System.IO {\r
-\r
- [Serializable]\r
- public sealed class FileInfo : FileSystemInfo {\r
- \r
-\r
- private bool exists;\r
-\r
- public FileInfo (string path) {\r
- CheckPath (path);\r
- \r
- OriginalPath = path;\r
- FullPath = Path.GetFullPath (path);\r
- }\r
- \r
- internal override void InternalRefresh ()\r
- {\r
- exists = File.Exists (FullPath);\r
- }\r
-\r
-\r
- // public properties\r
-\r
- public override bool Exists {\r
- get {\r
- Refresh (false);\r
-\r
- if (stat.Attributes == MonoIO.InvalidFileAttributes)\r
- return false;\r
-\r
- if ((stat.Attributes & FileAttributes.Directory) != 0)\r
- return false;\r
-\r
- return exists;\r
- }\r
- }\r
-\r
- public override string Name {\r
- get {\r
- return Path.GetFileName (FullPath);\r
- }\r
- }\r
-\r
- public long Length {\r
- get {\r
- if (!Exists)\r
- throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".");\r
-\r
- return stat.Length;\r
- }\r
- }\r
-\r
- public string DirectoryName {\r
- get {\r
- return Path.GetDirectoryName (FullPath);\r
- }\r
- }\r
-\r
- public DirectoryInfo Directory {\r
- get {\r
- return new DirectoryInfo (DirectoryName);\r
- }\r
- }\r
-\r
- // streamreader methods\r
-\r
- public StreamReader OpenText () {\r
- return new StreamReader (Open (FileMode.Open, FileAccess.Read));\r
- }\r
-\r
- public StreamWriter CreateText () {\r
- return new StreamWriter (Open (FileMode.Create, FileAccess.Write));\r
- }\r
- \r
- public StreamWriter AppendText () {\r
- return new StreamWriter (Open (FileMode.Append, FileAccess.Write));\r
- }\r
-\r
- // filestream methods\r
-\r
- public FileStream Create ()\r
- {\r
- return File.Create (FullPath);\r
- }\r
- \r
- \r
- public FileStream OpenRead () {\r
- return Open (FileMode.Open, FileAccess.Read);\r
- }\r
-\r
- public FileStream OpenWrite () {\r
- return Open (FileMode.OpenOrCreate, FileAccess.Write);\r
- }\r
-\r
- public FileStream Open (FileMode mode) {\r
- return Open (mode, FileAccess.ReadWrite);\r
- }\r
-\r
- public FileStream Open (FileMode mode, FileAccess access) {\r
- return Open (mode, access, FileShare.None);\r
- }\r
-\r
- public FileStream Open (FileMode mode, FileAccess access, FileShare share) {\r
- return new FileStream (FullPath, mode, access, share);\r
- }\r
-\r
- // file methods\r
-\r
- public override void Delete () {\r
- MonoIOError error;\r
- \r
- if (!MonoIO.Exists (FullPath, out error)) {\r
- // a weird MS.NET behaviour\r
- return;\r
- }\r
-\r
- if (MonoIO.ExistsDirectory (FullPath, out error)) {\r
- throw new UnauthorizedAccessException ("Access to the path \"" + FullPath + "\" is denied.");\r
- }\r
- \r
- if (!MonoIO.DeleteFile (FullPath, out error)) {\r
- throw MonoIO.GetException (OriginalPath,\r
- error);\r
- }\r
- }\r
- \r
- public void MoveTo (string dest) {\r
-\r
- if (dest == null)\r
- throw new ArgumentNullException ();\r
-\r
- if (dest == Name || dir == FullName)\r
- return;\r
-\r
- MonoIOError error;\r
- if (MonoIO.Exists (dest, out error) ||\r
- MonoIO.ExistsDirectory (dest, out error))\r
- throw new IOException ();\r
- File.Move (FullPath, dest);\r
- this.FullPath = Path.GetFullPath (dest);\r
- }\r
-\r
- public FileInfo CopyTo (string path) {\r
- return CopyTo (path, false);\r
- }\r
-\r
- public FileInfo CopyTo (string path, bool overwrite) {\r
- string dest = Path.GetFullPath (path);\r
-\r
- if (overwrite && File.Exists (path))\r
- File.Delete (path);\r
-\r
- File.Copy (FullPath, dest);\r
- \r
- return new FileInfo (dest);\r
- }\r
-\r
- public override string ToString () {\r
- return Name;\r
- }\r
- }\r
-}\r
+//------------------------------------------------------------------------------
+//
+// System.IO.FileInfo.cs
+//
+// 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
+//
+//------------------------------------------------------------------------------
+
+//
+// Copyright (C) 2004, 2006 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.Runtime.InteropServices;
+using System.Runtime.Serialization;
+
+#if NET_2_0
+using System.Security.AccessControl;
+#endif
+
+namespace System.IO {
+
+ [Serializable]
+#if NET_2_0
+ [ComVisible (true)]
+#endif
+ public sealed class FileInfo : FileSystemInfo
+ {
+ private bool exists;
+
+ public FileInfo (string fileName)
+ {
+ if (fileName == null)
+ throw new ArgumentNullException ("fileName");
+
+ CheckPath (fileName);
+
+ OriginalPath = fileName;
+ FullPath = Path.GetFullPath (fileName);
+ }
+
+ private FileInfo (SerializationInfo info, StreamingContext context)
+ : base (info, context)
+ {
+ }
+
+ internal override void InternalRefresh ()
+ {
+ 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;
+ }
+ }
+
+ public override string Name {
+ get {
+ return Path.GetFileName (FullPath);
+ }
+ }
+
+#if NET_2_0
+ public bool IsReadOnly {
+ get {
+ if (!Exists)
+ throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".", OriginalPath);
+
+ return ((stat.Attributes & FileAttributes.ReadOnly) != 0);
+ }
+
+ set {
+ if (!Exists)
+ throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".", OriginalPath);
+
+ FileAttributes attrs = File.GetAttributes(FullPath);
+
+ if (value)
+ attrs |= FileAttributes.ReadOnly;
+ else
+ attrs &= ~FileAttributes.ReadOnly;
+
+ File.SetAttributes(FullPath, attrs);
+ }
+ }
+
+ [MonoLimitation ("File encryption isn't supported (even on NTFS).")]
+ [ComVisible (false)]
+ public void Encrypt ()
+ {
+ // MS.NET support this only on NTFS file systems, i.e. it's a file-system (not a framework) feature.
+ // otherwise it throws a NotSupportedException (or a PlatformNotSupportedException on older OS).
+ // we throw the same (instead of a NotImplementedException) because most code should already be
+ // handling this exception to work properly.
+ throw new NotSupportedException (Locale.GetText ("File encryption isn't supported on any file system."));
+ }
+
+ [MonoLimitation ("File encryption isn't supported (even on NTFS).")]
+ [ComVisible (false)]
+ public void Decrypt ()
+ {
+ // MS.NET support this only on NTFS file systems, i.e. it's a file-system (not a framework) feature.
+ // otherwise it throws a NotSupportedException (or a PlatformNotSupportedException on older OS).
+ // we throw the same (instead of a NotImplementedException) because most code should already be
+ // handling this exception to work properly.
+ throw new NotSupportedException (Locale.GetText ("File encryption isn't supported on any file system."));
+ }
+#endif
+
+ public long Length {
+ get {
+ if (!Exists)
+ throw new FileNotFoundException ("Could not find file \"" + OriginalPath + "\".", OriginalPath);
+
+ return stat.Length;
+ }
+ }
+
+ public string DirectoryName {
+ get {
+ return Path.GetDirectoryName (FullPath);
+ }
+ }
+
+ public DirectoryInfo Directory {
+ get {
+ return new DirectoryInfo (DirectoryName);
+ }
+ }
+
+ // streamreader methods
+
+ public StreamReader OpenText ()
+ {
+ return new StreamReader (Open (FileMode.Open, FileAccess.Read));
+ }
+
+ public StreamWriter CreateText ()
+ {
+ return new StreamWriter (Open (FileMode.Create, FileAccess.Write));
+ }
+
+ public StreamWriter AppendText ()
+ {
+ return new StreamWriter (Open (FileMode.Append, FileAccess.Write));
+ }
+
+ // filestream methods
+
+ public FileStream Create ()
+ {
+ return File.Create (FullPath);
+ }
+
+ public FileStream OpenRead ()
+ {
+ return Open (FileMode.Open, FileAccess.Read, FileShare.Read);
+ }
+
+ public FileStream OpenWrite ()
+ {
+ return Open (FileMode.OpenOrCreate, FileAccess.Write);
+ }
+
+ public FileStream Open (FileMode mode)
+ {
+ return Open (mode, FileAccess.ReadWrite);
+ }
+
+ public FileStream Open (FileMode mode, FileAccess access)
+ {
+ return Open (mode, access, FileShare.None);
+ }
+
+ 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 destFileName)
+ {
+ if (destFileName == null)
+ throw new ArgumentNullException ("destFileName");
+ if (destFileName == Name || destFileName == FullName)
+ return;
+ if (!File.Exists (FullPath))
+ throw new FileNotFoundException ();
+
+ File.Move (FullPath, destFileName);
+ this.FullPath = Path.GetFullPath (destFileName);
+ }
+
+ public FileInfo CopyTo (string destFileName)
+ {
+ return CopyTo (destFileName, false);
+ }
+
+ public FileInfo CopyTo (string destFileName, bool overwrite)
+ {
+ if (destFileName == null)
+ throw new ArgumentNullException ("destFileName");
+ if (destFileName.Length == 0)
+ throw new ArgumentException ("An empty file name is not valid.", "destFileName");
+
+ string dest = Path.GetFullPath (destFileName);
+
+ if (overwrite && File.Exists (dest))
+ File.Delete (dest);
+
+ File.Copy (FullPath, dest);
+
+ return new FileInfo (dest);
+ }
+
+ public override string ToString ()
+ {
+ return OriginalPath;
+ }
+
+#if NET_2_0
+ public FileSecurity GetAccessControl ()
+ {
+ throw new NotImplementedException ();
+ }
+
+ public FileSecurity GetAccessControl (AccessControlSections includeSections)
+ {
+ throw new NotImplementedException ();
+ }
+
+ [ComVisible (false)]
+ public FileInfo Replace (string destinationFileName,
+ string destinationBackupFileName)
+ {
+ throw new NotImplementedException ();
+ }
+
+ [ComVisible (false)]
+ public FileInfo Replace (string destinationFileName,
+ string destinationBackupFileName,
+ bool ignoreMetadataErrors)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public void SetAccessControl (FileSecurity fileSecurity)
+ {
+ throw new NotImplementedException ();
+ }
+#endif
+ }
+}