/mcs/class/referencesource/mscorlib/system/io/file.cs
C# | 1152 lines | 929 code | 136 blank | 87 comment | 212 complexity | 1ccb0cea946f0c00e030df3dc763b728 MD5 | raw file
Possible License(s): LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0
- // ==++==
- //
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //
- // ==--==
- /*============================================================
- **
- ** Class: File
- **
- ** <OWNER>Microsoft</OWNER>
- **
- **
- ** Purpose: A collection of methods for manipulating Files.
- **
- ** April 09,2000 (some design refactorization)
- **
- ===========================================================*/
- using System;
- using System.Security.Permissions;
- using PermissionSet = System.Security.PermissionSet;
- using Win32Native = Microsoft.Win32.Win32Native;
- using System.Runtime.InteropServices;
- using System.Security;
- #if FEATURE_MACL
- using System.Security.AccessControl;
- #endif
- using System.Text;
- using Microsoft.Win32.SafeHandles;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Runtime.Versioning;
- using System.Diagnostics.Contracts;
-
- namespace System.IO {
- // Class for creating FileStream objects, and some basic file management
- // routines such as Delete, etc.
- [ComVisible(true)]
- public static class File
- {
- private const int GetFileExInfoStandard = 0;
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static StreamReader OpenText(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- return new StreamReader(path);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static StreamWriter CreateText(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- return new StreamWriter(path,false);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static StreamWriter AppendText(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- return new StreamWriter(path,true);
- }
- // Copies an existing file to a new file. An exception is raised if the
- // destination file already exists. Use the
- // Copy(String, String, boolean) method to allow
- // overwriting an existing file.
- //
- // The caller must have certain FileIOPermissions. The caller must have
- // Read permission to sourceFileName and Create
- // and Write permissions to destFileName.
- //
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void Copy(String sourceFileName, String destFileName) {
- if (sourceFileName == null)
- throw new ArgumentNullException("sourceFileName", Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName == null)
- throw new ArgumentNullException("destFileName", Environment.GetResourceString("ArgumentNull_FileName"));
- if (sourceFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "sourceFileName");
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "destFileName");
- Contract.EndContractBlock();
- InternalCopy(sourceFileName, destFileName, false, true);
- }
-
- // Copies an existing file to a new file. If overwrite is
- // false, then an IOException is thrown if the destination file
- // already exists. If overwrite is true, the file is
- // overwritten.
- //
- // The caller must have certain FileIOPermissions. The caller must have
- // Read permission to sourceFileName
- // and Write permissions to destFileName.
- //
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void Copy(String sourceFileName, String destFileName, bool overwrite) {
- if (sourceFileName == null)
- throw new ArgumentNullException("sourceFileName", Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName == null)
- throw new ArgumentNullException("destFileName", Environment.GetResourceString("ArgumentNull_FileName"));
- if (sourceFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "sourceFileName");
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "destFileName");
- Contract.EndContractBlock();
- InternalCopy(sourceFileName, destFileName, overwrite, true);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static void UnsafeCopy(String sourceFileName, String destFileName, bool overwrite) {
- if (sourceFileName == null)
- throw new ArgumentNullException("sourceFileName", Environment.GetResourceString("ArgumentNull_FileName"));
- if (destFileName == null)
- throw new ArgumentNullException("destFileName", Environment.GetResourceString("ArgumentNull_FileName"));
- if (sourceFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "sourceFileName");
- if (destFileName.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "destFileName");
- Contract.EndContractBlock();
- InternalCopy(sourceFileName, destFileName, overwrite, false);
- }
- /// <devdoc>
- /// Note: This returns the fully qualified name of the destination file.
- /// </devdoc>
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static String InternalCopy(String sourceFileName, String destFileName, bool overwrite, bool checkHost) {
- Contract.Requires(sourceFileName != null);
- Contract.Requires(destFileName != null);
- Contract.Requires(sourceFileName.Length > 0);
- Contract.Requires(destFileName.Length > 0);
- String fullSourceFileName = Path.GetFullPathInternal(sourceFileName);
- String fullDestFileName = Path.GetFullPathInternal(destFileName);
-
- #if FEATURE_CORECLR
- if (checkHost) {
- FileSecurityState sourceState = new FileSecurityState(FileSecurityStateAccess.Read, sourceFileName, fullSourceFileName);
- FileSecurityState destState = new FileSecurityState(FileSecurityStateAccess.Write, destFileName, fullDestFileName);
- sourceState.EnsureState();
- destState.EnsureState();
- }
- #else
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, fullSourceFileName, false, false);
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Write, fullDestFileName, false, false);
- #endif
-
- bool r = Win32Native.CopyFile(fullSourceFileName, fullDestFileName, !overwrite);
- if (!r) {
- // Save Win32 error because subsequent checks will overwrite this HRESULT.
- int errorCode = Marshal.GetLastWin32Error();
- String fileName = destFileName;
- if (errorCode != Win32Native.ERROR_FILE_EXISTS) {
- // For a number of error codes (sharing violation, path
- // not found, etc) we don't know if the problem was with
- // the source or dest file. Try reading the source file.
- using(SafeFileHandle handle = Win32Native.UnsafeCreateFile(fullSourceFileName, FileStream.GENERIC_READ, FileShare.Read, null, FileMode.Open, 0, IntPtr.Zero)) {
- if (handle.IsInvalid)
- fileName = sourceFileName;
- }
- if (errorCode == Win32Native.ERROR_ACCESS_DENIED) {
- if (Directory.InternalExists(fullDestFileName))
- throw new IOException(Environment.GetResourceString("Arg_FileIsDirectory_Name", destFileName), Win32Native.ERROR_ACCESS_DENIED, fullDestFileName);
- }
- }
- __Error.WinIOError(errorCode, fileName);
- }
-
- return fullDestFileName;
- }
- // Creates a file in a particular path. If the file exists, it is replaced.
- // The file is opened with ReadWrite accessand cannot be opened by another
- // application until it has been closed. An IOException is thrown if the
- // directory specified doesn't exist.
- //
- // Your application must have Create, Read, and Write permissions to
- // the file.
- //
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream Create(String path) {
- return Create(path, FileStream.DefaultBufferSize);
- }
-
- // Creates a file in a particular path. If the file exists, it is replaced.
- // The file is opened with ReadWrite access and cannot be opened by another
- // application until it has been closed. An IOException is thrown if the
- // directory specified doesn't exist.
- //
- // Your application must have Create, Read, and Write permissions to
- // the file.
- //
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream Create(String path, int bufferSize) {
- return new FileStream(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None, bufferSize);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream Create(String path, int bufferSize, FileOptions options) {
- return new FileStream(path, FileMode.Create, FileAccess.ReadWrite,
- FileShare.None, bufferSize, options);
- }
- #if FEATURE_MACL
- public static FileStream Create(String path, int bufferSize, FileOptions options, FileSecurity fileSecurity) {
- return new FileStream(path, FileMode.Create, FileSystemRights.Read | FileSystemRights.Write,
- FileShare.None, bufferSize, options, fileSecurity);
- }
- #endif
- // Deletes a file. The file specified by the designated path is deleted.
- // If the file does not exist, Delete succeeds without throwing
- // an exception.
- //
- // On NT, Delete will fail for a file that is open for normal I/O
- // or a file that is memory mapped.
- //
- // Your application must have Delete permission to the target file.
- //
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void Delete(String path) {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- #if FEATURE_LEGACYNETCF
- if(CompatibilitySwitches.IsAppEarlierThanWindowsPhone8) {
- System.Reflection.Assembly callingAssembly = System.Reflection.Assembly.GetCallingAssembly();
- if(callingAssembly != null && !callingAssembly.IsProfileAssembly) {
- string caller = new System.Diagnostics.StackFrame(1).GetMethod().FullName;
- string callee = System.Reflection.MethodBase.GetCurrentMethod().FullName;
- throw new MethodAccessException(String.Format(
- CultureInfo.CurrentCulture,
- Environment.GetResourceString("Arg_MethodAccessException_WithCaller"),
- caller,
- callee));
- }
- }
- #endif // FEATURE_LEGACYNETCF
-
- InternalDelete(path, true);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static void UnsafeDelete(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- InternalDelete(path, false);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static void InternalDelete(String path, bool checkHost)
- {
- String fullPath = Path.GetFullPathInternal(path);
- #if FEATURE_CORECLR
- if (checkHost)
- {
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Write, path, fullPath);
- state.EnsureState();
- }
- #else
- // For security check, path should be resolved to an absolute path.
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Write, fullPath, false, false);
- #endif
- bool r = Win32Native.DeleteFile(fullPath);
- if (!r) {
- int hr = Marshal.GetLastWin32Error();
- if (hr==Win32Native.ERROR_FILE_NOT_FOUND)
- return;
- else
- __Error.WinIOError(hr, fullPath);
- }
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void Decrypt(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- #if FEATURE_PAL
- throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_RequiresNT"));
- #else
- String fullPath = Path.GetFullPathInternal(path);
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read | FileIOPermissionAccess.Write, fullPath, false, false);
- bool r = Win32Native.DecryptFile(fullPath, 0);
- if (!r) {
- int errorCode = Marshal.GetLastWin32Error();
- if (errorCode == Win32Native.ERROR_ACCESS_DENIED) {
- // Check to see if the file system is not NTFS. If so,
- // throw a different exception.
- DriveInfo di = new DriveInfo(Path.GetPathRoot(fullPath));
- if (!String.Equals("NTFS", di.DriveFormat))
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_EncryptionNeedsNTFS"));
- }
- __Error.WinIOError(errorCode, fullPath);
- }
- #endif
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void Encrypt(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- Contract.EndContractBlock();
- #if FEATURE_PAL
- throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_RequiresNT"));
- #else
- String fullPath = Path.GetFullPathInternal(path);
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read | FileIOPermissionAccess.Write, fullPath, false, false);
- bool r = Win32Native.EncryptFile(fullPath);
- if (!r) {
- int errorCode = Marshal.GetLastWin32Error();
- if (errorCode == Win32Native.ERROR_ACCESS_DENIED) {
- // Check to see if the file system is not NTFS. If so,
- // throw a different exception.
- DriveInfo di = new DriveInfo(Path.GetPathRoot(fullPath));
- if (!String.Equals("NTFS", di.DriveFormat))
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_EncryptionNeedsNTFS"));
- }
- __Error.WinIOError(errorCode, fullPath);
- }
- #endif
- }
- // Tests if a file exists. The result is true if the file
- // given by the specified path exists; otherwise, the result is
- // false. Note that if path describes a directory,
- // Exists will return true.
- //
- // Your application must have Read permission for the target directory.
- //
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static bool Exists(String path)
- {
- #if FEATURE_LEGACYNETCF
- if(CompatibilitySwitches.IsAppEarlierThanWindowsPhone8) {
- System.Reflection.Assembly callingAssembly = System.Reflection.Assembly.GetCallingAssembly();
- if(callingAssembly != null && !callingAssembly.IsProfileAssembly) {
- string caller = new System.Diagnostics.StackFrame(1).GetMethod().FullName;
- string callee = System.Reflection.MethodBase.GetCurrentMethod().FullName;
- throw new MethodAccessException(String.Format(
- CultureInfo.CurrentCulture,
- Environment.GetResourceString("Arg_MethodAccessException_WithCaller"),
- caller,
- callee));
- }
- }
- #endif // FEATURE_LEGACYNETCF
- return InternalExistsHelper(path, true);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static bool UnsafeExists(String path)
- {
- return InternalExistsHelper(path, false);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static bool InternalExistsHelper(String path, bool checkHost)
- {
- try
- {
- if (path == null)
- return false;
- if (path.Length == 0)
- return false;
- path = Path.GetFullPathInternal(path);
- // After normalizing, check whether path ends in directory separator.
- // Otherwise, FillAttributeInfo removes it and we may return a false positive.
- // GetFullPathInternal should never return null
- Contract.Assert(path != null, "File.Exists: GetFullPathInternal returned null");
- if (path.Length > 0 && Path.IsDirectorySeparator(path[path.Length - 1]))
- {
- return false;
- }
- #if FEATURE_CORECLR
- if (checkHost)
- {
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Read, String.Empty, path);
- state.EnsureState();
- }
- #else
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, path, false, false);
- #endif
- return InternalExists(path);
- }
- catch (ArgumentException) { }
- catch (NotSupportedException) { } // Security can throw this on ":"
- catch (SecurityException) { }
- catch (IOException) { }
- catch (UnauthorizedAccessException) { }
- return false;
- }
- [System.Security.SecurityCritical] // auto-generated
- internal static bool InternalExists(String path) {
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(path, ref data, false, true);
- return (dataInitialised == 0) && (data.fileAttributes != -1)
- && ((data.fileAttributes & Win32Native.FILE_ATTRIBUTE_DIRECTORY) == 0);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream Open(String path, FileMode mode) {
- return Open(path, mode, (mode == FileMode.Append ? FileAccess.Write : FileAccess.ReadWrite), FileShare.None);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream Open(String path, FileMode mode, FileAccess access) {
- return Open(path,mode, access, FileShare.None);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream Open(String path, FileMode mode, FileAccess access, FileShare share) {
- return new FileStream(path, mode, access, share);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void SetCreationTime(String path, DateTime creationTime)
- {
- SetCreationTimeUtc(path, creationTime.ToUniversalTime());
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public unsafe static void SetCreationTimeUtc(String path, DateTime creationTimeUtc)
- {
- SafeFileHandle handle;
- using(OpenFile(path, FileAccess.Write, out handle)) {
- Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(creationTimeUtc.ToFileTimeUtc());
- bool r = Win32Native.SetFileTime(handle, &fileTime, null, null);
- if (!r)
- {
- int errorCode = Marshal.GetLastWin32Error();
- __Error.WinIOError(errorCode, path);
- }
- }
- }
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static DateTime GetCreationTime(String path)
- {
- return InternalGetCreationTimeUtc(path, true).ToLocalTime();
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static DateTime GetCreationTimeUtc(String path)
- {
- return InternalGetCreationTimeUtc(path, false); // this API isn't exposed in Silverlight
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static DateTime InternalGetCreationTimeUtc(String path, bool checkHost)
- {
- String fullPath = Path.GetFullPathInternal(path);
- #if FEATURE_CORECLR
- if (checkHost)
- {
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Read, path, fullPath);
- state.EnsureState();
- }
- #else
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, fullPath, false, false);
- #endif
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, false);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
- long dt = ((long)(data.ftCreationTimeHigh) << 32) | ((long)data.ftCreationTimeLow);
- return DateTime.FromFileTimeUtc(dt);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void SetLastAccessTime(String path, DateTime lastAccessTime)
- {
- SetLastAccessTimeUtc(path, lastAccessTime.ToUniversalTime());
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public unsafe static void SetLastAccessTimeUtc(String path, DateTime lastAccessTimeUtc)
- {
- SafeFileHandle handle;
- using(OpenFile(path, FileAccess.Write, out handle)) {
- Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(lastAccessTimeUtc.ToFileTimeUtc());
- bool r = Win32Native.SetFileTime(handle, null, &fileTime, null);
- if (!r)
- {
- int errorCode = Marshal.GetLastWin32Error();
- __Error.WinIOError(errorCode, path);
- }
- }
- }
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static DateTime GetLastAccessTime(String path)
- {
- return InternalGetLastAccessTimeUtc(path, true).ToLocalTime();
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static DateTime GetLastAccessTimeUtc(String path)
- {
- return InternalGetLastAccessTimeUtc(path, false); // this API isn't exposed in Silverlight
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static DateTime InternalGetLastAccessTimeUtc(String path, bool checkHost)
- {
- String fullPath = Path.GetFullPathInternal(path);
- #if FEATURE_CORECLR
- if (checkHost)
- {
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Read, path, fullPath);
- state.EnsureState();
- }
- #else
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, fullPath, false, false);
- #endif
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, false);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
- long dt = ((long)(data.ftLastAccessTimeHigh) << 32) | ((long)data.ftLastAccessTimeLow);
- return DateTime.FromFileTimeUtc(dt);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void SetLastWriteTime(String path, DateTime lastWriteTime)
- {
- SetLastWriteTimeUtc(path, lastWriteTime.ToUniversalTime());
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public unsafe static void SetLastWriteTimeUtc(String path, DateTime lastWriteTimeUtc)
- {
- SafeFileHandle handle;
- using(OpenFile(path, FileAccess.Write, out handle)) {
- Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(lastWriteTimeUtc.ToFileTimeUtc());
- bool r = Win32Native.SetFileTime(handle, null, null, &fileTime);
- if (!r)
- {
- int errorCode = Marshal.GetLastWin32Error();
- __Error.WinIOError(errorCode, path);
- }
- }
- }
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static DateTime GetLastWriteTime(String path)
- {
- return InternalGetLastWriteTimeUtc(path, true).ToLocalTime();
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static DateTime GetLastWriteTimeUtc(String path)
- {
- return InternalGetLastWriteTimeUtc(path, false); // this API isn't exposed in Silverlight
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static DateTime InternalGetLastWriteTimeUtc(String path, bool checkHost)
- {
- String fullPath = Path.GetFullPathInternal(path);
- #if FEATURE_CORECLR
- if (checkHost)
- {
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Read, path, fullPath);
- state.EnsureState();
- }
- #else
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, fullPath, false, false);
- #endif
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, false);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
- long dt = ((long)data.ftLastWriteTimeHigh << 32) | ((long)data.ftLastWriteTimeLow);
- return DateTime.FromFileTimeUtc(dt);
- }
- [System.Security.SecuritySafeCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileAttributes GetAttributes(String path)
- {
- String fullPath = Path.GetFullPathInternal(path);
- #if FEATURE_CORECLR
- FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Read, path, fullPath);
- state.EnsureState();
- #else
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, fullPath, false, false);
- #endif
- Win32Native.WIN32_FILE_ATTRIBUTE_DATA data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
- int dataInitialised = FillAttributeInfo(fullPath, ref data, false, true);
- if (dataInitialised != 0)
- __Error.WinIOError(dataInitialised, fullPath);
- return (FileAttributes) data.fileAttributes;
- }
- #if FEATURE_CORECLR
- [System.Security.SecurityCritical]
- #else
- [System.Security.SecuritySafeCritical]
- #endif
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void SetAttributes(String path, FileAttributes fileAttributes)
- {
- String fullPath = Path.GetFullPathInternal(path);
- #if !FEATURE_CORECLR
- FileIOPermission.QuickDemand(FileIOPermissionAccess.Write, fullPath, false, false);
- #endif
- bool r = Win32Native.SetFileAttributes(fullPath, (int) fileAttributes);
- if (!r) {
- int hr = Marshal.GetLastWin32Error();
- if (hr==ERROR_INVALID_PARAMETER)
- throw new ArgumentException(Environment.GetResourceString("Arg_InvalidFileAttrs"));
- __Error.WinIOError(hr, fullPath);
- }
- }
- #if FEATURE_MACL
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileSecurity GetAccessControl(String path)
- {
- return GetAccessControl(path, AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileSecurity GetAccessControl(String path, AccessControlSections includeSections)
- {
- // Appropriate security check should be done for us by FileSecurity.
- return new FileSecurity(path, includeSections);
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void SetAccessControl(String path, FileSecurity fileSecurity)
- {
- if (fileSecurity == null)
- throw new ArgumentNullException("fileSecurity");
- Contract.EndContractBlock();
- String fullPath = Path.GetFullPathInternal(path);
- // Appropriate security check should be done for us by FileSecurity.
- fileSecurity.Persist(fullPath);
- }
- #endif
- #if FEATURE_LEGACYNETCF
- [System.Security.SecuritySafeCritical]
- #endif // FEATURE_LEGACYNETCF
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream OpenRead(String path) {
- #if FEATURE_LEGACYNETCF
- if(CompatibilitySwitches.IsAppEarlierThanWindowsPhone8) {
- System.Reflection.Assembly callingAssembly = System.Reflection.Assembly.GetCallingAssembly();
- if(callingAssembly != null && !callingAssembly.IsProfileAssembly) {
- string caller = new System.Diagnostics.StackFrame(1).GetMethod().FullName;
- string callee = System.Reflection.MethodBase.GetCurrentMethod().FullName;
- throw new MethodAccessException(String.Format(
- CultureInfo.CurrentCulture,
- Environment.GetResourceString("Arg_MethodAccessException_WithCaller"),
- caller,
- callee));
- }
- }
- #endif // FEATURE_LEGACYNETCF
- return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static FileStream OpenWrite(String path) {
- return new FileStream(path, FileMode.OpenOrCreate,
- FileAccess.Write, FileShare.None);
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static String ReadAllText(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- return InternalReadAllText(path, Encoding.UTF8, true);
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static String ReadAllText(String path, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- return InternalReadAllText(path, encoding, true);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static String UnsafeReadAllText(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- return InternalReadAllText(path, Encoding.UTF8, false);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static String InternalReadAllText(String path, Encoding encoding, bool checkHost)
- {
- Contract.Requires(path != null);
- Contract.Requires(encoding != null);
- Contract.Requires(path.Length > 0);
- using (StreamReader sr = new StreamReader(path, encoding, true, StreamReader.DefaultBufferSize, checkHost))
- return sr.ReadToEnd();
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllText(String path, String contents)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM, true);
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllText(String path, String contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllText(path, contents, encoding, true);
- }
-
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static void UnsafeWriteAllText(String path, String contents)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM, false);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static void InternalWriteAllText(String path, String contents, Encoding encoding, bool checkHost)
- {
- Contract.Requires(path != null);
- Contract.Requires(encoding != null);
- Contract.Requires(path.Length > 0);
- using (StreamWriter sw = new StreamWriter(path, false, encoding, StreamWriter.DefaultBufferSize, checkHost))
- sw.Write(contents);
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static byte[] ReadAllBytes(String path)
- {
- return InternalReadAllBytes(path, true);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static byte[] UnsafeReadAllBytes(String path)
- {
- return InternalReadAllBytes(path, false);
- }
-
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static byte[] InternalReadAllBytes(String path, bool checkHost)
- {
- byte[] bytes;
- using(FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read,
- FileStream.DefaultBufferSize, FileOptions.None, Path.GetFileName(path), false, false, checkHost)) {
- // Do a blocking read
- int index = 0;
- long fileLength = fs.Length;
- if (fileLength > Int32.MaxValue)
- throw new IOException(Environment.GetResourceString("IO.IO_FileTooLong2GB"));
- int count = (int) fileLength;
- bytes = new byte[count];
- while(count > 0) {
- int n = fs.Read(bytes, index, count);
- if (n == 0)
- __Error.EndOfFile();
- index += n;
- count -= n;
- }
- }
- return bytes;
- }
- [System.Security.SecuritySafeCritical] // auto-generated
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllBytes(String path, byte[] bytes)
- {
- if (path == null)
- throw new ArgumentNullException("path", Environment.GetResourceString("ArgumentNull_Path"));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- if (bytes == null)
- throw new ArgumentNullException("bytes");
- Contract.EndContractBlock();
- InternalWriteAllBytes(path, bytes, true);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- internal static void UnsafeWriteAllBytes(String path, byte[] bytes)
- {
- if (path == null)
- throw new ArgumentNullException("path", Environment.GetResourceString("ArgumentNull_Path"));
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- if (bytes == null)
- throw new ArgumentNullException("bytes");
- Contract.EndContractBlock();
- InternalWriteAllBytes(path, bytes, false);
- }
- [System.Security.SecurityCritical]
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static void InternalWriteAllBytes(String path, byte[] bytes, bool checkHost)
- {
- Contract.Requires(path != null);
- Contract.Requires(path.Length != 0);
- Contract.Requires(bytes != null);
- using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read,
- FileStream.DefaultBufferSize, FileOptions.None, Path.GetFileName(path), false, false, checkHost))
- {
- fs.Write(bytes, 0, bytes.Length);
- }
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static String[] ReadAllLines(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- return InternalReadAllLines(path, Encoding.UTF8);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static String[] ReadAllLines(String path, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- return InternalReadAllLines(path, encoding);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static String[] InternalReadAllLines(String path, Encoding encoding)
- {
- Contract.Requires(path != null);
- Contract.Requires(encoding != null);
- Contract.Requires(path.Length != 0);
- String line;
- List<String> lines = new List<String>();
- using (StreamReader sr = new StreamReader(path, encoding))
- while ((line = sr.ReadLine()) != null)
- lines.Add(line);
- return lines.ToArray();
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static IEnumerable<String> ReadLines(String path)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"), "path");
- Contract.EndContractBlock();
- return ReadLinesIterator.CreateIterator(path, Encoding.UTF8);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static IEnumerable<String> ReadLines(String path, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"), "path");
- Contract.EndContractBlock();
- return ReadLinesIterator.CreateIterator(path, encoding);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllLines(String path, String[] contents)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (contents == null)
- throw new ArgumentNullException("contents");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllLines(new StreamWriter(path, false, StreamWriter.UTF8NoBOM), contents);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllLines(String path, String[] contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (contents == null)
- throw new ArgumentNullException("contents");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllLines(new StreamWriter(path, false, encoding), contents);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllLines(String path, IEnumerable<String> contents)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (contents == null)
- throw new ArgumentNullException("contents");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllLines(new StreamWriter(path, false, StreamWriter.UTF8NoBOM), contents);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void WriteAllLines(String path, IEnumerable<String> contents, Encoding encoding)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (contents == null)
- throw new ArgumentNullException("contents");
- if (encoding == null)
- throw new ArgumentNullException("encoding");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalWriteAllLines(new StreamWriter(path, false, encoding), contents);
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- private static void InternalWriteAllLines(TextWriter writer, IEnumerable<String> contents)
- {
- Contract.Requires(writer != null);
- Contract.Requires(contents != null);
- using (writer)
- {
- foreach (String line in contents)
- {
- writer.WriteLine(line);
- }
- }
- }
- [ResourceExposure(ResourceScope.Machine)]
- [ResourceConsumption(ResourceScope.Machine)]
- public static void AppendAllText(String path, String contents)
- {
- if (path == null)
- throw new ArgumentNullException("path");
- if (path.Length == 0)
- throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
- Contract.EndContractBlock();
- InternalAppendAllText(p