Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / WinForms / Managed / System / WinForms / OpenFileDialog.cs / 5 / OpenFileDialog.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms
{
using System.Diagnostics;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
using CodeAccessPermission = System.Security.CodeAccessPermission;
using System.Security.Permissions;
using System.IO;
using System.ComponentModel;
using Microsoft.Win32;
///
///
///
/// Represents a common dialog box
/// that displays the control that allows the user to open a file. This class
/// cannot be inherited.
///
///
[SRDescription(SR.DescriptionOpenFileDialog)]
public sealed class OpenFileDialog : FileDialog
{
///
///
///
/// Gets or sets a value indicating whether the dialog box displays a
/// warning if the user specifies a file name that does not exist.
///
///
[
DefaultValue(true),
SRDescription(SR.OFDcheckFileExistsDescr)
]
public override bool CheckFileExists
{
get
{
return base.CheckFileExists;
}
set
{
base.CheckFileExists = value;
}
}
///
///
///
/// Gets or sets a value
/// indicating whether the dialog box allows multiple files to be selected.
///
///
[
SRCategory(SR.CatBehavior),
DefaultValue(false),
SRDescription(SR.OFDmultiSelectDescr)
]
public bool Multiselect
{
get
{
return GetOption(NativeMethods.OFN_ALLOWMULTISELECT);
}
set
{
SetOption(NativeMethods.OFN_ALLOWMULTISELECT, value);
}
}
///
///
///
/// Gets or sets a value indicating whether
/// the read-only check box is selected.
///
///
[
SRCategory(SR.CatBehavior),
DefaultValue(false),
SRDescription(SR.OFDreadOnlyCheckedDescr)
]
public bool ReadOnlyChecked
{
get
{
return GetOption(NativeMethods.OFN_READONLY);
}
set
{
SetOption(NativeMethods.OFN_READONLY, value);
}
}
///
///
///
/// Gets or sets a value indicating whether the dialog contains a read-only check box.
///
///
[
SRCategory(SR.CatBehavior),
DefaultValue(false),
SRDescription(SR.OFDshowReadOnlyDescr)
]
public bool ShowReadOnly
{
get
{
return !GetOption(NativeMethods.OFN_HIDEREADONLY);
}
set
{
SetOption(NativeMethods.OFN_HIDEREADONLY, !value);
}
}
///
///
///
/// Opens the file selected by the user with read-only permission. The file
/// attempted is specified by the property.
///
///
[SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
/// SECREVIEW: ReviewImperativeSecurity
/// vulnerability to watch out for: A method uses imperative security and might be constructing the permission using state information or return values that can change while the demand is active.
/// reason for exclude: filename is snapped directly at the beginning of the function.
[SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
public Stream OpenFile()
{
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "FileDialogOpenFile Demanded");
IntSecurity.FileDialogOpenFile.Demand();
string filename = FileNamesInternal[0];
if (filename == null || (filename.Length == 0))
throw new ArgumentNullException("FileName");
Stream s = null;
// SECREVIEW : We demanded the FileDialog permission above, so it is safe
// : to assert this here. Since the user picked the file, it
// : is OK to give them readonly access to the stream.
//
new FileIOPermission(FileIOPermissionAccess.Read, IntSecurity.UnsafeGetFullPath(filename)).Assert();
try
{
s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
}
finally
{
CodeAccessPermission.RevertAssert();
}
return s;
}
///
///
///
/// Resets all properties to their default values.
///
///
public override void Reset()
{
base.Reset();
SetOption(NativeMethods.OFN_FILEMUSTEXIST, true);
}
internal override void EnsureFileDialogPermission()
{
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "FileDialogOpenFile Demanded in OpenFileDialog.RunFileDialog");
IntSecurity.FileDialogOpenFile.Demand();
}
///
///
/// Displays a file open dialog.
///
///
internal override bool RunFileDialog(NativeMethods.OPENFILENAME_I ofn)
{
//We have already done the demand in EnsureFileDialogPermission but it doesn't hurt to do it again
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "FileDialogOpenFile Demanded in OpenFileDialog.RunFileDialog");
IntSecurity.FileDialogOpenFile.Demand();
bool result = UnsafeNativeMethods.GetOpenFileName(ofn);
if (!result)
{
// Something may have gone wrong - check for error condition
//
int errorCode = SafeNativeMethods.CommDlgExtendedError();
switch (errorCode)
{
case NativeMethods.FNERR_INVALIDFILENAME:
throw new InvalidOperationException(SR.GetString(SR.FileDialogInvalidFileName, FileName));
case NativeMethods.FNERR_SUBCLASSFAILURE:
throw new InvalidOperationException(SR.GetString(SR.FileDialogSubLassFailure));
case NativeMethods.FNERR_BUFFERTOOSMALL:
throw new InvalidOperationException(SR.GetString(SR.FileDialogBufferTooSmall));
}
}
return result;
}
internal override string[] ProcessVistaFiles(FileDialogNative.IFileDialog dialog)
{
FileDialogNative.IFileOpenDialog openDialog = (FileDialogNative.IFileOpenDialog)dialog;
if (Multiselect)
{
FileDialogNative.IShellItemArray results;
openDialog.GetResults(out results);
uint count;
results.GetCount(out count);
string[] files = new string[count];
for (uint i = 0; i < count; ++i)
{
FileDialogNative.IShellItem item;
results.GetItemAt(i, out item);
files[unchecked((int)i)] = GetFilePathFromShellItem(item);
}
return files;
}
else
{
FileDialogNative.IShellItem item;
openDialog.GetResult(out item);
return new string[] { GetFilePathFromShellItem(item) };
}
}
internal override FileDialogNative.IFileDialog CreateVistaDialog()
{
return new FileDialogNative.NativeFileOpenDialog();
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts")
]
public string SafeFileName
{
get
{
new FileIOPermission(PermissionState.Unrestricted).Assert();
string fullPath = FileName;
CodeAccessPermission.RevertAssert();
if (string.IsNullOrEmpty(fullPath))
{
return "";
}
string safePath = RemoveSensitivePathInformation(fullPath);
return safePath;
}
}
private static string RemoveSensitivePathInformation(string fullPath)
{
return System.IO.Path.GetFileName(fullPath);
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays"),
SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts")
]
public string[] SafeFileNames
{
get
{
new FileIOPermission(PermissionState.Unrestricted).Assert();
string[] fullPaths = FileNames;
CodeAccessPermission.RevertAssert();
if (null == fullPaths || 0 == fullPaths.Length)
{ return new string[0]; }
string[] safePaths = new string[fullPaths.Length];
for (int i = 0; i < safePaths.Length; ++i)
{
safePaths[i] = RemoveSensitivePathInformation(fullPaths[i]);
}
return safePaths;
}
}
internal override bool SettingsSupportVistaDialog
{
get
{
return base.SettingsSupportVistaDialog && !this.ShowReadOnly;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms
{
using System.Diagnostics;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
using CodeAccessPermission = System.Security.CodeAccessPermission;
using System.Security.Permissions;
using System.IO;
using System.ComponentModel;
using Microsoft.Win32;
///
///
///
/// Represents a common dialog box
/// that displays the control that allows the user to open a file. This class
/// cannot be inherited.
///
///
[SRDescription(SR.DescriptionOpenFileDialog)]
public sealed class OpenFileDialog : FileDialog
{
///
///
///
/// Gets or sets a value indicating whether the dialog box displays a
/// warning if the user specifies a file name that does not exist.
///
///
[
DefaultValue(true),
SRDescription(SR.OFDcheckFileExistsDescr)
]
public override bool CheckFileExists
{
get
{
return base.CheckFileExists;
}
set
{
base.CheckFileExists = value;
}
}
///
///
///
/// Gets or sets a value
/// indicating whether the dialog box allows multiple files to be selected.
///
///
[
SRCategory(SR.CatBehavior),
DefaultValue(false),
SRDescription(SR.OFDmultiSelectDescr)
]
public bool Multiselect
{
get
{
return GetOption(NativeMethods.OFN_ALLOWMULTISELECT);
}
set
{
SetOption(NativeMethods.OFN_ALLOWMULTISELECT, value);
}
}
///
///
///
/// Gets or sets a value indicating whether
/// the read-only check box is selected.
///
///
[
SRCategory(SR.CatBehavior),
DefaultValue(false),
SRDescription(SR.OFDreadOnlyCheckedDescr)
]
public bool ReadOnlyChecked
{
get
{
return GetOption(NativeMethods.OFN_READONLY);
}
set
{
SetOption(NativeMethods.OFN_READONLY, value);
}
}
///
///
///
/// Gets or sets a value indicating whether the dialog contains a read-only check box.
///
///
[
SRCategory(SR.CatBehavior),
DefaultValue(false),
SRDescription(SR.OFDshowReadOnlyDescr)
]
public bool ShowReadOnly
{
get
{
return !GetOption(NativeMethods.OFN_HIDEREADONLY);
}
set
{
SetOption(NativeMethods.OFN_HIDEREADONLY, !value);
}
}
///
///
///
/// Opens the file selected by the user with read-only permission. The file
/// attempted is specified by the property.
///
///
[SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly")]
/// SECREVIEW: ReviewImperativeSecurity
/// vulnerability to watch out for: A method uses imperative security and might be constructing the permission using state information or return values that can change while the demand is active.
/// reason for exclude: filename is snapped directly at the beginning of the function.
[SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity")]
public Stream OpenFile()
{
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "FileDialogOpenFile Demanded");
IntSecurity.FileDialogOpenFile.Demand();
string filename = FileNamesInternal[0];
if (filename == null || (filename.Length == 0))
throw new ArgumentNullException("FileName");
Stream s = null;
// SECREVIEW : We demanded the FileDialog permission above, so it is safe
// : to assert this here. Since the user picked the file, it
// : is OK to give them readonly access to the stream.
//
new FileIOPermission(FileIOPermissionAccess.Read, IntSecurity.UnsafeGetFullPath(filename)).Assert();
try
{
s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
}
finally
{
CodeAccessPermission.RevertAssert();
}
return s;
}
///
///
///
/// Resets all properties to their default values.
///
///
public override void Reset()
{
base.Reset();
SetOption(NativeMethods.OFN_FILEMUSTEXIST, true);
}
internal override void EnsureFileDialogPermission()
{
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "FileDialogOpenFile Demanded in OpenFileDialog.RunFileDialog");
IntSecurity.FileDialogOpenFile.Demand();
}
///
///
/// Displays a file open dialog.
///
///
internal override bool RunFileDialog(NativeMethods.OPENFILENAME_I ofn)
{
//We have already done the demand in EnsureFileDialogPermission but it doesn't hurt to do it again
Debug.WriteLineIf(IntSecurity.SecurityDemand.TraceVerbose, "FileDialogOpenFile Demanded in OpenFileDialog.RunFileDialog");
IntSecurity.FileDialogOpenFile.Demand();
bool result = UnsafeNativeMethods.GetOpenFileName(ofn);
if (!result)
{
// Something may have gone wrong - check for error condition
//
int errorCode = SafeNativeMethods.CommDlgExtendedError();
switch (errorCode)
{
case NativeMethods.FNERR_INVALIDFILENAME:
throw new InvalidOperationException(SR.GetString(SR.FileDialogInvalidFileName, FileName));
case NativeMethods.FNERR_SUBCLASSFAILURE:
throw new InvalidOperationException(SR.GetString(SR.FileDialogSubLassFailure));
case NativeMethods.FNERR_BUFFERTOOSMALL:
throw new InvalidOperationException(SR.GetString(SR.FileDialogBufferTooSmall));
}
}
return result;
}
internal override string[] ProcessVistaFiles(FileDialogNative.IFileDialog dialog)
{
FileDialogNative.IFileOpenDialog openDialog = (FileDialogNative.IFileOpenDialog)dialog;
if (Multiselect)
{
FileDialogNative.IShellItemArray results;
openDialog.GetResults(out results);
uint count;
results.GetCount(out count);
string[] files = new string[count];
for (uint i = 0; i < count; ++i)
{
FileDialogNative.IShellItem item;
results.GetItemAt(i, out item);
files[unchecked((int)i)] = GetFilePathFromShellItem(item);
}
return files;
}
else
{
FileDialogNative.IShellItem item;
openDialog.GetResult(out item);
return new string[] { GetFilePathFromShellItem(item) };
}
}
internal override FileDialogNative.IFileDialog CreateVistaDialog()
{
return new FileDialogNative.NativeFileOpenDialog();
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts")
]
public string SafeFileName
{
get
{
new FileIOPermission(PermissionState.Unrestricted).Assert();
string fullPath = FileName;
CodeAccessPermission.RevertAssert();
if (string.IsNullOrEmpty(fullPath))
{
return "";
}
string safePath = RemoveSensitivePathInformation(fullPath);
return safePath;
}
}
private static string RemoveSensitivePathInformation(string fullPath)
{
return System.IO.Path.GetFileName(fullPath);
}
[
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays"),
SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts")
]
public string[] SafeFileNames
{
get
{
new FileIOPermission(PermissionState.Unrestricted).Assert();
string[] fullPaths = FileNames;
CodeAccessPermission.RevertAssert();
if (null == fullPaths || 0 == fullPaths.Length)
{ return new string[0]; }
string[] safePaths = new string[fullPaths.Length];
for (int i = 0; i < safePaths.Length; ++i)
{
safePaths[i] = RemoveSensitivePathInformation(fullPaths[i]);
}
return safePaths;
}
}
internal override bool SettingsSupportVistaDialog
{
get
{
return base.SettingsSupportVistaDialog && !this.ShowReadOnly;
}
}
}
}
// 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
- Size3D.cs
- DbTransaction.cs
- DataViewSetting.cs
- XmlWrappingReader.cs
- ResolveMatches11.cs
- RtfFormatStack.cs
- HyperLinkField.cs
- HuffCodec.cs
- DbConnectionPool.cs
- DataBinding.cs
- DataComponentMethodGenerator.cs
- AttributeEmitter.cs
- ExpandableObjectConverter.cs
- XmlSchemaValidator.cs
- WindowsPen.cs
- PageRanges.cs
- CheckBoxBaseAdapter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ComplexLine.cs
- PriorityBindingExpression.cs
- RegexCaptureCollection.cs
- SqlServer2KCompatibilityAnnotation.cs
- TabControlAutomationPeer.cs
- ToolStripSystemRenderer.cs
- StrongBox.cs
- DocumentSequenceHighlightLayer.cs
- OneOfScalarConst.cs
- KeyedCollection.cs
- ProviderUtil.cs
- ComponentDispatcher.cs
- MSAAEventDispatcher.cs
- util.cs
- DbModificationClause.cs
- TraversalRequest.cs
- ModelUIElement3D.cs
- DataGridDesigner.cs
- TrackBar.cs
- ColumnResult.cs
- VoiceSynthesis.cs
- RTLAwareMessageBox.cs
- CapacityStreamGeometryContext.cs
- TextBlockAutomationPeer.cs
- PropertyInformationCollection.cs
- SortAction.cs
- XmlSchemaSimpleType.cs
- WebZone.cs
- SQLMembershipProvider.cs
- Point3D.cs
- ServiceElementCollection.cs
- CryptoKeySecurity.cs
- IconConverter.cs
- PropVariant.cs
- AssemblyInfo.cs
- XamlWriter.cs
- CommonDialog.cs
- FrameworkTemplate.cs
- Matrix3DConverter.cs
- SimpleWorkerRequest.cs
- QueryLifecycle.cs
- PeerNodeTraceRecord.cs
- DictionaryBase.cs
- FixUp.cs
- LoadedOrUnloadedOperation.cs
- x509utils.cs
- CodeVariableReferenceExpression.cs
- RepeatBehaviorConverter.cs
- Vector3DAnimation.cs
- StrongNameKeyPair.cs
- EventPrivateKey.cs
- MediaCommands.cs
- PermissionSetTriple.cs
- DetailsViewDeleteEventArgs.cs
- Themes.cs
- CryptographicAttribute.cs
- PackageStore.cs
- ReservationNotFoundException.cs
- ManifestResourceInfo.cs
- XmlQualifiedName.cs
- ProviderUtil.cs
- ObjectQuery.cs
- FullTrustAssemblyCollection.cs
- DataGridViewAccessibleObject.cs
- newitemfactory.cs
- OutOfProcStateClientManager.cs
- XmlSiteMapProvider.cs
- URLIdentityPermission.cs
- PropertyPath.cs
- formatter.cs
- HGlobalSafeHandle.cs
- DataServices.cs
- ModelPerspective.cs
- RouteUrlExpressionBuilder.cs
- InstanceLockedException.cs
- SoapAttributeAttribute.cs
- X509CertificateStore.cs
- ToolStripGrip.cs
- WindowsUpDown.cs
- BamlRecordWriter.cs
- CompositeDataBoundControl.cs
- HttpCookieCollection.cs