X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.IO%2FFile.cs;h=4d7fc102ed52ce0a3770321a4ec52510f42b2a54;hb=ced82e1238771c46d6c6e2be30c664ad38c254a2;hp=ab5f506b6a8130c551860e6e31567213ae43d663;hpb=fefd6f1d0578964f8ec15e061c5b2db1f9ef4fbc;p=mono.git diff --git a/mcs/class/corlib/System.IO/File.cs b/mcs/class/corlib/System.IO/File.cs index ab5f506b6a8..4d7fc102ed5 100644 --- a/mcs/class/corlib/System.IO/File.cs +++ b/mcs/class/corlib/System.IO/File.cs @@ -1,5 +1,5 @@ // -// System.IO.FIle.cs +// System.IO.File.cs // // // Authors: @@ -10,10 +10,7 @@ // // Copyright 2002 Ximian, Inc. http://www.ximian.com // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved -// - -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) +// 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 @@ -36,12 +33,21 @@ // using System; +using System.Text; +#if NET_2_0 +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Security.AccessControl; +#endif namespace System.IO { /// /// /// +#if NET_2_0 + [ComVisible (true)] +#endif public #if NET_2_0 static @@ -55,12 +61,27 @@ namespace System.IO private File () {} #endif +#if NET_2_0 + public static void AppendAllText (string path, string contents) + { + using (TextWriter w = new StreamWriter (path, true)) { + w.Write (contents); + } + } + + public static void AppendAllText (string path, string contents, Encoding encoding) + { + using (TextWriter w = new StreamWriter (path, true, encoding)) { + w.Write (contents); + } + } +#endif + public static StreamWriter AppendText (string path) { return new StreamWriter (path, true); } - [MonoTODO("Security Permision Checks")] public static void Copy (string sourceFilename, string destFilename) { Copy (sourceFilename, destFilename, false); @@ -105,10 +126,32 @@ namespace System.IO public static FileStream Create (string path) { - return Create (path, 8192); + return(Create (path, 8192, FileOptions.None, null)); } public static FileStream Create (string path, int buffersize) + { + return(Create (path, buffersize, FileOptions.None, + null)); + } + +#if NET_2_0 + [MonoTODO ("options not implemented")] + public static FileStream Create (string path, int bufferSize, + FileOptions options) + { + return(Create (path, bufferSize, options, null)); + } + + [MonoTODO ("options and fileSecurity not implemented")] + public static FileStream Create (string path, int bufferSize, + FileOptions options, + FileSecurity fileSecurity) +#else + private static FileStream Create (string path, int bufferSize, + FileOptions options, + object fileSecurity) +#endif { if (null == path) throw new ArgumentNullException ("path"); @@ -125,7 +168,7 @@ namespace System.IO } return new FileStream (path, FileMode.Create, FileAccess.ReadWrite, - FileShare.None, buffersize); + FileShare.None, bufferSize); } public static StreamWriter CreateText(string path) @@ -153,9 +196,8 @@ namespace System.IO MonoIOError error; if (!MonoIO.DeleteFile (path, out error)){ - Exception e = MonoIO.GetException (path, error); - if (! (e is FileNotFoundException)) - throw e; + if (error != MonoIOError.ERROR_FILE_NOT_FOUND) + throw MonoIO.GetException (path, error); } } @@ -172,18 +214,20 @@ namespace System.IO } MonoIOError error; - bool exists; - - exists = MonoIO.ExistsFile (path, out error); - if (error != MonoIOError.ERROR_SUCCESS && - error != MonoIOError.ERROR_FILE_NOT_FOUND && - error != MonoIOError.ERROR_PATH_NOT_FOUND && - error != MonoIOError.ERROR_INVALID_NAME) { - throw MonoIO.GetException (path, error); - } - - return(exists); + return MonoIO.ExistsFile (path, out error); + } + +#if NET_2_0 + public static FileSecurity GetAccessControl (string path) + { + throw new NotImplementedException (); + } + + public static FileSecurity GetAccessControl (string path, AccessControlSections includeSections) + { + throw new NotImplementedException (); } +#endif public static FileAttributes GetAttributes (string path) { @@ -215,9 +259,17 @@ namespace System.IO MonoIOStat stat; MonoIOError error; CheckPathExceptions (path); - - if (!MonoIO.GetFileStat (path, out stat, out error)) + + if (!MonoIO.GetFileStat (path, out stat, out error)) { +#if NET_2_0 + if (error == MonoIOError.ERROR_PATH_NOT_FOUND || error == MonoIOError.ERROR_FILE_NOT_FOUND) + return _defaultLocalFileTime; + else + throw new IOException (path); +#else throw new IOException (path); +#endif + } return DateTime.FromFileTime (stat.CreationTime); } @@ -232,8 +284,16 @@ namespace System.IO MonoIOError error; CheckPathExceptions (path); - if (!MonoIO.GetFileStat (path, out stat, out error)) + if (!MonoIO.GetFileStat (path, out stat, out error)) { +#if NET_2_0 + if (error == MonoIOError.ERROR_PATH_NOT_FOUND || error == MonoIOError.ERROR_FILE_NOT_FOUND) + return _defaultLocalFileTime; + else + throw new IOException (path); +#else throw new IOException (path); +#endif + } return DateTime.FromFileTime (stat.LastAccessTime); } @@ -248,8 +308,16 @@ namespace System.IO MonoIOError error; CheckPathExceptions (path); - if (!MonoIO.GetFileStat (path, out stat, out error)) + if (!MonoIO.GetFileStat (path, out stat, out error)) { +#if NET_2_0 + if (error == MonoIOError.ERROR_PATH_NOT_FOUND || error == MonoIOError.ERROR_FILE_NOT_FOUND) + return _defaultLocalFileTime; + else + throw new IOException (path); +#else throw new IOException (path); +#endif + } return DateTime.FromFileTime (stat.LastWriteTime); } @@ -326,6 +394,29 @@ namespace System.IO return new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); } +#if NET_2_0 + public static void Replace (string sourceFileName, + string destinationFileName, + string destinationBackupFileName) + { + throw new NotImplementedException (); + } + + public static void Replace (string sourceFileName, + string destinationFileName, + string destinationBackupFileName, + bool ignoreMetadataErrors) + { + throw new NotImplementedException (); + } + + public static void SetAccessControl (string path, + FileSecurity fileSecurity) + { + throw new NotImplementedException (); + } +#endif + public static void SetAttributes (string path, FileAttributes attributes) { @@ -410,6 +501,11 @@ namespace System.IO #endregion #if NET_2_0 + static File() { + _defaultLocalFileTime = new DateTime (1601, 1, 1); + _defaultLocalFileTime = _defaultLocalFileTime.ToLocalTime (); + } + // // The documentation for this method is most likely wrong, it // talks about doing a "binary read", but the remarks say @@ -436,6 +532,101 @@ namespace System.IO return result; } } + + public static string [] ReadAllLines (string path) + { + using (StreamReader reader = File.OpenText (path)) { + return ReadAllLines (reader); + } + } + + public static string [] ReadAllLines (string path, Encoding encoding) + { + using (StreamReader reader = new StreamReader (path, encoding)) { + return ReadAllLines (reader); + } + } + + static string [] ReadAllLines (StreamReader reader) + { + List list = new List (); + while (!reader.EndOfStream) + list.Add (reader.ReadLine ()); + return list.ToArray (); + } + + public static string ReadAllText (string path) + { + return ReadAllText (path, Encoding.UTF8Unmarked); + } + + public static string ReadAllText (string path, Encoding enc) + { + using (StreamReader sr = new StreamReader (path, enc)) { + return sr.ReadToEnd (); + } + } + + public static void WriteAllBytes (string path, byte [] data) + { + using (Stream stream = File.Create (path)) { + stream.Write (data, 0, data.Length); + } + } + + public static void WriteAllLines (string path, string [] lines) + { + using (StreamWriter writer = new StreamWriter (path)) { + WriteAllLines (writer, lines); + } + } + + public static void WriteAllLines (string path, string [] lines, Encoding encoding) + { + using (StreamWriter writer = new StreamWriter (path, false, encoding)) { + WriteAllLines (writer, lines); + } + } + + static void WriteAllLines (StreamWriter writer, string [] lines) + { + foreach (string line in lines) + writer.WriteLine (line); + } + + public static void WriteAllText (string path, string contents) + { + WriteAllText (path, contents, Encoding.UTF8Unmarked); + } + + public static void WriteAllText (string path, string contents, Encoding enc) + { + using (StreamWriter sw = new StreamWriter (path, false, enc)) { + sw.Write (contents); + } + } + + private static readonly DateTime _defaultLocalFileTime; + + [MonoLimitation ("File encryption isn't supported (even on NTFS).")] + public static void Encrypt (string path) + { + // 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).")] + public static void Decrypt (string path) + { + // 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 } }