Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / IO / FileSystemInfo.cs / 1305376 / FileSystemInfo.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: FileSystemInfo
**
** [....]
**
**
** Purpose:
**
**
===========================================================*/
using System;
using System.Collections;
using System.Security;
using System.Security.Permissions;
using Microsoft.Win32;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
namespace System.IO {
[Serializable]
[FileIOPermissionAttribute(SecurityAction.InheritanceDemand,Unrestricted=true)]
[ComVisible(true)]
#if FEATURE_REMOTING
public abstract class FileSystemInfo : MarshalByRefObject, ISerializable {
#if false
}
#endif //false
#else // FEATURE_REMOTING
public abstract class FileSystemInfo : ISerializable {
#endif //FEATURE_REMOTING
[System.Security.SecurityCritical /*auto-generated*/]
internal Win32Native.WIN32_FILE_ATTRIBUTE_DATA _data; // Cache the file information
internal int _dataInitialised = -1; // We use this field in conjunction with the Refresh methods, if we succeed
// we store a zero, on failure we store the HResult in it so that we can
// give back a generic error back.
private const int ERROR_INVALID_PARAMETER = 87;
internal const int ERROR_ACCESS_DENIED = 0x5;
protected String FullPath; // fully qualified path of the directory
protected String OriginalPath; // path passed in by the user
private String _displayPath = ""; // path that can be displayed to the user
protected FileSystemInfo()
{
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
protected FileSystemInfo(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
Contract.EndContractBlock();
// Must use V1 field names here, since V1 didn't implement
// ISerializable.
FullPath = Path.GetFullPathInternal(info.GetString("FullPath"));
OriginalPath = info.GetString("OriginalPath");
// Lazily initialize the file attributes.
_dataInitialised = -1;
}
[System.Security.SecurityCritical]
internal void InitializeFrom(Win32Native.WIN32_FIND_DATA findData)
{
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
_data.PopulateFrom(findData);
_dataInitialised = 0;
}
// Full path of the direcory/file
public virtual String FullName {
[System.Security.SecuritySafeCritical] // auto-generated
get
{
String demandDir;
if (this is DirectoryInfo)
demandDir = Directory.GetDemandDir(FullPath, true);
else
demandDir = FullPath;
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, demandDir).Demand();
return FullPath;
}
}
public String Extension
{
get
{
// GetFullPathInternal would have already stripped out the terminating "." if present.
int length = FullPath.Length;
for (int i = length; --i >= 0;) {
char ch = FullPath[i];
if (ch == '.')
return FullPath.Substring(i, length - i);
if (ch == Path.DirectorySeparatorChar || ch == Path.AltDirectorySeparatorChar || ch == Path.VolumeSeparatorChar)
break;
}
return String.Empty;
}
}
// For files name of the file is returned, for directories the last directory in hierarchy is returned if possible,
// otherwise the fully qualified name s returned
public abstract String Name {
get;
}
// Whether a file/directory exists
public abstract bool Exists
{
get;
}
// Delete a file/directory
public abstract void Delete();
public DateTime CreationTime {
[System.Security.SecuritySafeCritical] // auto-generated
get {
return CreationTimeUtc.ToLocalTime();
}
#if FEATURE_CORECLR //Need the getter to be public and the setter to be internal: TrimSrc doesn't parse into property declarations
internal
#endif //FEATURE_CORECLR
set {
CreationTimeUtc = value.ToUniversalTime();
}
}
[ComVisible(false)]
public DateTime CreationTimeUtc {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh();
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
long fileTime = ((long)_data.ftCreationTimeHigh << 32) | _data.ftCreationTimeLow;
return DateTime.FromFileTimeUtc(fileTime);
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
set {
if (this is DirectoryInfo)
Directory.SetCreationTimeUtc(FullPath,value);
else
File.SetCreationTimeUtc(FullPath,value);
_dataInitialised = -1;
}
}
public DateTime LastAccessTime {
[System.Security.SecuritySafeCritical] // auto-generated
get {
return LastAccessTimeUtc.ToLocalTime();
}
#if FEATURE_CORECLR //Need the getter to be public and the setter to be internal: TrimSrc doesn't parse into property declarations
internal
#endif //FEATURE_CORECLR
set {
LastAccessTimeUtc = value.ToUniversalTime();
}
}
[ComVisible(false)]
public DateTime LastAccessTimeUtc {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh();
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
long fileTime = ((long)_data.ftLastAccessTimeHigh << 32) | _data.ftLastAccessTimeLow;
return DateTime.FromFileTimeUtc(fileTime);
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
set {
if (this is DirectoryInfo)
Directory.SetLastAccessTimeUtc(FullPath,value);
else
File.SetLastAccessTimeUtc(FullPath,value);
_dataInitialised = -1;
}
}
public DateTime LastWriteTime {
[System.Security.SecuritySafeCritical] // auto-generated
get {
return LastWriteTimeUtc.ToLocalTime();
}
#if FEATURE_CORECLR //Need the getter to be public and the setter to be internal: TrimSrc doesn't parse into property declarations
internal
#endif //FEATURE_CORECLR
set {
LastWriteTimeUtc = value.ToUniversalTime();
}
}
[ComVisible(false)]
public DateTime LastWriteTimeUtc {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh();
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
long fileTime = ((long)_data.ftLastWriteTimeHigh << 32) | _data.ftLastWriteTimeLow;
return DateTime.FromFileTimeUtc(fileTime);
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
set {
if (this is DirectoryInfo)
Directory.SetLastWriteTimeUtc(FullPath,value);
else
File.SetLastWriteTimeUtc(FullPath,value);
_dataInitialised = -1;
}
}
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
public void Refresh()
{
_dataInitialised = File.FillAttributeInfo(FullPath, ref _data, false, false);
}
public FileAttributes Attributes {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh(); // Call refresh to intialise the data
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
return (FileAttributes) _data.fileAttributes;
}
[System.Security.SecuritySafeCritical] // auto-generated
set {
new FileIOPermission(FileIOPermissionAccess.Write, FullPath).Demand();
bool r = Win32Native.SetFileAttributes(FullPath, (int) value);
if (!r) {
int hr = Marshal.GetLastWin32Error();
if (hr==ERROR_INVALID_PARAMETER)
throw new ArgumentException(Environment.GetResourceString("Arg_InvalidFileAttrs"));
// For whatever reason we are turning ERROR_ACCESS_DENIED into
// ArgumentException here (probably done for some 9x code path).
// We can't change this now but special casing the error message instead.
if (hr == ERROR_ACCESS_DENIED)
throw new ArgumentException(Environment.GetResourceString("UnauthorizedAccess_IODenied_NoPathName"));
__Error.WinIOError(hr, DisplayPath);
}
_dataInitialised = -1;
}
}
[System.Security.SecurityCritical] // auto-generated_required
[ComVisible(false)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, FullPath).Demand();
info.AddValue("OriginalPath", OriginalPath, typeof(String));
info.AddValue("FullPath", FullPath, typeof(String));
}
internal String DisplayPath
{
get
{
return _displayPath;
}
set
{
_displayPath = value;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: FileSystemInfo
**
** [....]
**
**
** Purpose:
**
**
===========================================================*/
using System;
using System.Collections;
using System.Security;
using System.Security.Permissions;
using Microsoft.Win32;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Diagnostics.Contracts;
namespace System.IO {
[Serializable]
[FileIOPermissionAttribute(SecurityAction.InheritanceDemand,Unrestricted=true)]
[ComVisible(true)]
#if FEATURE_REMOTING
public abstract class FileSystemInfo : MarshalByRefObject, ISerializable {
#if false
}
#endif //false
#else // FEATURE_REMOTING
public abstract class FileSystemInfo : ISerializable {
#endif //FEATURE_REMOTING
[System.Security.SecurityCritical /*auto-generated*/]
internal Win32Native.WIN32_FILE_ATTRIBUTE_DATA _data; // Cache the file information
internal int _dataInitialised = -1; // We use this field in conjunction with the Refresh methods, if we succeed
// we store a zero, on failure we store the HResult in it so that we can
// give back a generic error back.
private const int ERROR_INVALID_PARAMETER = 87;
internal const int ERROR_ACCESS_DENIED = 0x5;
protected String FullPath; // fully qualified path of the directory
protected String OriginalPath; // path passed in by the user
private String _displayPath = ""; // path that can be displayed to the user
protected FileSystemInfo()
{
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
protected FileSystemInfo(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
Contract.EndContractBlock();
// Must use V1 field names here, since V1 didn't implement
// ISerializable.
FullPath = Path.GetFullPathInternal(info.GetString("FullPath"));
OriginalPath = info.GetString("OriginalPath");
// Lazily initialize the file attributes.
_dataInitialised = -1;
}
[System.Security.SecurityCritical]
internal void InitializeFrom(Win32Native.WIN32_FIND_DATA findData)
{
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
_data.PopulateFrom(findData);
_dataInitialised = 0;
}
// Full path of the direcory/file
public virtual String FullName {
[System.Security.SecuritySafeCritical] // auto-generated
get
{
String demandDir;
if (this is DirectoryInfo)
demandDir = Directory.GetDemandDir(FullPath, true);
else
demandDir = FullPath;
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, demandDir).Demand();
return FullPath;
}
}
public String Extension
{
get
{
// GetFullPathInternal would have already stripped out the terminating "." if present.
int length = FullPath.Length;
for (int i = length; --i >= 0;) {
char ch = FullPath[i];
if (ch == '.')
return FullPath.Substring(i, length - i);
if (ch == Path.DirectorySeparatorChar || ch == Path.AltDirectorySeparatorChar || ch == Path.VolumeSeparatorChar)
break;
}
return String.Empty;
}
}
// For files name of the file is returned, for directories the last directory in hierarchy is returned if possible,
// otherwise the fully qualified name s returned
public abstract String Name {
get;
}
// Whether a file/directory exists
public abstract bool Exists
{
get;
}
// Delete a file/directory
public abstract void Delete();
public DateTime CreationTime {
[System.Security.SecuritySafeCritical] // auto-generated
get {
return CreationTimeUtc.ToLocalTime();
}
#if FEATURE_CORECLR //Need the getter to be public and the setter to be internal: TrimSrc doesn't parse into property declarations
internal
#endif //FEATURE_CORECLR
set {
CreationTimeUtc = value.ToUniversalTime();
}
}
[ComVisible(false)]
public DateTime CreationTimeUtc {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh();
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
long fileTime = ((long)_data.ftCreationTimeHigh << 32) | _data.ftCreationTimeLow;
return DateTime.FromFileTimeUtc(fileTime);
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
set {
if (this is DirectoryInfo)
Directory.SetCreationTimeUtc(FullPath,value);
else
File.SetCreationTimeUtc(FullPath,value);
_dataInitialised = -1;
}
}
public DateTime LastAccessTime {
[System.Security.SecuritySafeCritical] // auto-generated
get {
return LastAccessTimeUtc.ToLocalTime();
}
#if FEATURE_CORECLR //Need the getter to be public and the setter to be internal: TrimSrc doesn't parse into property declarations
internal
#endif //FEATURE_CORECLR
set {
LastAccessTimeUtc = value.ToUniversalTime();
}
}
[ComVisible(false)]
public DateTime LastAccessTimeUtc {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh();
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
long fileTime = ((long)_data.ftLastAccessTimeHigh << 32) | _data.ftLastAccessTimeLow;
return DateTime.FromFileTimeUtc(fileTime);
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
set {
if (this is DirectoryInfo)
Directory.SetLastAccessTimeUtc(FullPath,value);
else
File.SetLastAccessTimeUtc(FullPath,value);
_dataInitialised = -1;
}
}
public DateTime LastWriteTime {
[System.Security.SecuritySafeCritical] // auto-generated
get {
return LastWriteTimeUtc.ToLocalTime();
}
#if FEATURE_CORECLR //Need the getter to be public and the setter to be internal: TrimSrc doesn't parse into property declarations
internal
#endif //FEATURE_CORECLR
set {
LastWriteTimeUtc = value.ToUniversalTime();
}
}
[ComVisible(false)]
public DateTime LastWriteTimeUtc {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh();
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
long fileTime = ((long)_data.ftLastWriteTimeHigh << 32) | _data.ftLastWriteTimeLow;
return DateTime.FromFileTimeUtc(fileTime);
}
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
set {
if (this is DirectoryInfo)
Directory.SetLastWriteTimeUtc(FullPath,value);
else
File.SetLastWriteTimeUtc(FullPath,value);
_dataInitialised = -1;
}
}
[System.Security.SecuritySafeCritical] // auto-generated
[ResourceExposure(ResourceScope.None)]
[ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
public void Refresh()
{
_dataInitialised = File.FillAttributeInfo(FullPath, ref _data, false, false);
}
public FileAttributes Attributes {
[System.Security.SecuritySafeCritical] // auto-generated
get {
if (_dataInitialised == -1) {
_data = new Win32Native.WIN32_FILE_ATTRIBUTE_DATA();
Refresh(); // Call refresh to intialise the data
}
if (_dataInitialised != 0) // Refresh was unable to initialise the data
__Error.WinIOError(_dataInitialised, DisplayPath);
return (FileAttributes) _data.fileAttributes;
}
[System.Security.SecuritySafeCritical] // auto-generated
set {
new FileIOPermission(FileIOPermissionAccess.Write, FullPath).Demand();
bool r = Win32Native.SetFileAttributes(FullPath, (int) value);
if (!r) {
int hr = Marshal.GetLastWin32Error();
if (hr==ERROR_INVALID_PARAMETER)
throw new ArgumentException(Environment.GetResourceString("Arg_InvalidFileAttrs"));
// For whatever reason we are turning ERROR_ACCESS_DENIED into
// ArgumentException here (probably done for some 9x code path).
// We can't change this now but special casing the error message instead.
if (hr == ERROR_ACCESS_DENIED)
throw new ArgumentException(Environment.GetResourceString("UnauthorizedAccess_IODenied_NoPathName"));
__Error.WinIOError(hr, DisplayPath);
}
_dataInitialised = -1;
}
}
[System.Security.SecurityCritical] // auto-generated_required
[ComVisible(false)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, FullPath).Demand();
info.AddValue("OriginalPath", OriginalPath, typeof(String));
info.AddValue("FullPath", FullPath, typeof(String));
}
internal String DisplayPath
{
get
{
return _displayPath;
}
set
{
_displayPath = value;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- IDQuery.cs
- ControlBuilderAttribute.cs
- DbProviderFactories.cs
- Margins.cs
- SchemaMapping.cs
- PropertyTabAttribute.cs
- DnsPermission.cs
- MTConfigUtil.cs
- Separator.cs
- OperationAbortedException.cs
- mactripleDES.cs
- ToolStripDropDownDesigner.cs
- BufferedGraphicsManager.cs
- DataGridTextColumn.cs
- LineSegment.cs
- FormDocumentDesigner.cs
- EdmSchemaError.cs
- FontDialog.cs
- RecordManager.cs
- DataObjectCopyingEventArgs.cs
- ChildChangedEventArgs.cs
- XmlEntityReference.cs
- TextTreeTextBlock.cs
- ListCollectionView.cs
- GestureRecognizer.cs
- regiisutil.cs
- DataGridHyperlinkColumn.cs
- StrongNameUtility.cs
- SingleKeyFrameCollection.cs
- Imaging.cs
- ThousandthOfEmRealDoubles.cs
- OSFeature.cs
- AmbientValueAttribute.cs
- TextRunProperties.cs
- ActiveXHelper.cs
- BasicBrowserDialog.cs
- EntityParameterCollection.cs
- SimpleNameService.cs
- HwndSource.cs
- Point3D.cs
- AppDomainFactory.cs
- NavigationWindow.cs
- ParameterCollectionEditorForm.cs
- ScaleTransform3D.cs
- CodeTypeDeclaration.cs
- AppDomainUnloadedException.cs
- WindowsTokenRoleProvider.cs
- OleDbException.cs
- PropertyGridEditorPart.cs
- PipelineModuleStepContainer.cs
- SHA1CryptoServiceProvider.cs
- TreeNodeCollection.cs
- GetBrowserTokenRequest.cs
- EndpointAddressMessageFilter.cs
- FontDifferentiator.cs
- VersionValidator.cs
- XdrBuilder.cs
- LocalizableAttribute.cs
- DefaultValueConverter.cs
- RuntimeHelpers.cs
- ClientEndpointLoader.cs
- LambdaCompiler.Generated.cs
- HotSpot.cs
- PointCollection.cs
- BuildProviderCollection.cs
- Scanner.cs
- DurationConverter.cs
- StorageMappingItemLoader.cs
- SmiGettersStream.cs
- LowerCaseStringConverter.cs
- SqlGatherConsumedAliases.cs
- ResourceReferenceExpressionConverter.cs
- TextEditorCopyPaste.cs
- SqlExpressionNullability.cs
- TableRow.cs
- ItemChangedEventArgs.cs
- MetadataImporter.cs
- EntityDataSourceValidationException.cs
- Message.cs
- DoubleCollectionConverter.cs
- WebPartManager.cs
- ToolboxService.cs
- ConfigurationSchemaErrors.cs
- RadioButtonRenderer.cs
- MultiAsyncResult.cs
- LZCodec.cs
- FastEncoderWindow.cs
- ValidatorAttribute.cs
- RegexStringValidator.cs
- SqlDataSourceCache.cs
- XslTransform.cs
- BrushMappingModeValidation.cs
- IUnknownConstantAttribute.cs
- storepermission.cs
- SQLDecimalStorage.cs
- UTF7Encoding.cs
- InfoCardTrace.cs
- DrawToolTipEventArgs.cs
- BitmapCache.cs
- OperationInfo.cs