Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / IO / __Error.cs / 1305376 / __Error.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: __Error ** ** ** Purpose: Centralized error methods. Used for translating ** Win32 HRESULTs into meaningful error strings & exceptions. ** ** ===========================================================*/ using System; using System.Globalization; using System.Reflection; using System.Resources; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; using UnsafeNativeMethods = Microsoft.Win32.UnsafeNativeMethods; namespace System.IO { // Only static data; no need to serialize internal static class __Error { internal static void EndOfFile() { throw new EndOfStreamException(SR.GetString(SR.IO_EOF_ReadBeyondEOF)); } internal static void FileNotOpen() { throw new ObjectDisposedException(null, SR.GetString(SR.ObjectDisposed_FileClosed)); } internal static void PipeNotOpen() { throw new ObjectDisposedException(null, SR.GetString(SR.ObjectDisposed_PipeClosed)); } internal static void StreamIsClosed() { throw new ObjectDisposedException(null, SR.GetString(SR.ObjectDisposed_StreamIsClosed)); } internal static void ReadNotSupported() { throw new NotSupportedException(SR.GetString(SR.NotSupported_UnreadableStream)); } internal static void SeekNotSupported() { throw new NotSupportedException(SR.GetString(SR.NotSupported_UnseekableStream)); } internal static void WrongAsyncResult() { throw new ArgumentException(SR.GetString(SR.Argument_WrongAsyncResult)); } internal static void EndReadCalledTwice() { // Should ideally be InvalidOperationExc but we can't maintain parity with Stream and FileStream without some work throw new ArgumentException(SR.GetString(SR.InvalidOperation_EndReadCalledMultiple)); } internal static void EndWriteCalledTwice() { // Should ideally be InvalidOperationExc but we can't maintain parity with Stream and FileStream without some work throw new ArgumentException(SR.GetString(SR.InvalidOperation_EndWriteCalledMultiple)); } internal static void EndWaitForConnectionCalledTwice() { // Should ideally be InvalidOperationExc but we can't maitain parity with Stream and FileStream without some work throw new ArgumentException(SR.GetString(SR.InvalidOperation_EndWaitForConnectionCalledMultiple)); } ////// Given a possible fully qualified path, ensure that we have path discovery permission /// to that path. If we do not, return just the file name. If we know it is a directory, /// then don't return the directory name. /// /// /// ///internal static String GetDisplayablePath(String path, bool isInvalidPath) { if (String.IsNullOrEmpty(path)) { return path; } // Is it a fully qualified path? bool isFullyQualified = false; if (path.Length < 2) { return path; } if ((path[0] == Path.DirectorySeparatorChar) && (path[1] == Path.DirectorySeparatorChar)) { isFullyQualified = true; } else if (path[1] == Path.VolumeSeparatorChar) { isFullyQualified = true; } if (!isFullyQualified && !isInvalidPath) { return path; } bool safeToReturn = false; try { if (!isInvalidPath) { new FileIOPermission(FileIOPermissionAccess.PathDiscovery, new String[] { path }).Demand(); safeToReturn = true; } } catch (SecurityException) { } catch (ArgumentException) { // ? and * characters cause ArgumentException to be thrown from HasIllegalCharacters // inside FileIOPermission.AddPathList } catch (NotSupportedException) { // paths like "!Bogus\\dir:with/junk_.in it" can cause NotSupportedException to be thrown // from Security.Util.StringExpressionSet.CanonicalizePath when ':' is found in the path // beyond string index position 1. } if (!safeToReturn) { if ((path[path.Length - 1]) == Path.DirectorySeparatorChar) { path = SR.GetString(SR.IO_IO_NoPermissionToDirectoryName); } else { path = Path.GetFileName(path); } } return path; } // // [System.Security.SecurityCritical] internal static void WinIOError() { int errorCode = Marshal.GetLastWin32Error(); WinIOError(errorCode, String.Empty); } // After calling GetLastWin32Error(), it clears the last error field, so you must save the // HResult and pass it to this method. This method will determine the appropriate // exception to throw dependent on your error, and depending on the error, insert a string // into the message gotten from the ResourceManager. //// // // [System.Security.SecurityCritical] internal static void WinIOError(int errorCode, String maybeFullPath) { // This doesn't have to be perfect, but is a perf optimization. bool isInvalidPath = errorCode == UnsafeNativeMethods.ERROR_INVALID_NAME || errorCode == UnsafeNativeMethods.ERROR_BAD_PATHNAME; String str = GetDisplayablePath(maybeFullPath, isInvalidPath); switch (errorCode) { case UnsafeNativeMethods.ERROR_FILE_NOT_FOUND: if (str.Length == 0) { throw new FileNotFoundException(SR.GetString(SR.IO_FileNotFound)); } else { throw new FileNotFoundException(String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.IO_FileNotFound_FileName), str), str); } case UnsafeNativeMethods.ERROR_PATH_NOT_FOUND: if (str.Length == 0) { throw new DirectoryNotFoundException(SR.GetString(SR.IO_PathNotFound_NoPathName)); } else { throw new DirectoryNotFoundException(String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.IO_PathNotFound_Path), str)); } case UnsafeNativeMethods.ERROR_ACCESS_DENIED: if (str.Length == 0) { throw new UnauthorizedAccessException(SR.GetString(SR.UnauthorizedAccess_IODenied_NoPathName)); } else { throw new UnauthorizedAccessException(String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.UnauthorizedAccess_IODenied_Path), str)); } case UnsafeNativeMethods.ERROR_ALREADY_EXISTS: if (str.Length == 0) { goto default; } throw new IOException(SR.GetString(SR.IO_IO_AlreadyExists_Name, str), UnsafeNativeMethods.MakeHRFromErrorCode(errorCode)); case UnsafeNativeMethods.ERROR_FILENAME_EXCED_RANGE: throw new PathTooLongException(SR.GetString(SR.IO_PathTooLong)); case UnsafeNativeMethods.ERROR_INVALID_DRIVE: throw new DriveNotFoundException(String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.IO_DriveNotFound_Drive), str)); case UnsafeNativeMethods.ERROR_INVALID_PARAMETER: throw new IOException(UnsafeNativeMethods.GetMessage(errorCode), UnsafeNativeMethods.MakeHRFromErrorCode(errorCode)); case UnsafeNativeMethods.ERROR_SHARING_VIOLATION: if (str.Length == 0) { throw new IOException(SR.GetString(SR.IO_IO_SharingViolation_NoFileName), UnsafeNativeMethods.MakeHRFromErrorCode(errorCode)); } else { throw new IOException(SR.GetString(SR.IO_IO_SharingViolation_File, str), UnsafeNativeMethods.MakeHRFromErrorCode(errorCode)); } case UnsafeNativeMethods.ERROR_FILE_EXISTS: if (str.Length == 0) { goto default; } throw new IOException(String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.IO_IO_FileExists_Name), str), UnsafeNativeMethods.MakeHRFromErrorCode(errorCode)); case UnsafeNativeMethods.ERROR_OPERATION_ABORTED: throw new OperationCanceledException(); default: throw new IOException(UnsafeNativeMethods.GetMessage(errorCode), UnsafeNativeMethods.MakeHRFromErrorCode(errorCode)); } } internal static void WriteNotSupported() { throw new NotSupportedException(SR.GetString(SR.NotSupported_UnwritableStream)); } } } // 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
- ComponentChangingEvent.cs
- StringUtil.cs
- RegularExpressionValidator.cs
- MergeFilterQuery.cs
- RangeValuePattern.cs
- AccessKeyManager.cs
- COM2ExtendedUITypeEditor.cs
- InkCanvasSelection.cs
- CapabilitiesRule.cs
- CurrencyManager.cs
- UniformGrid.cs
- InkPresenter.cs
- LinqDataView.cs
- WebPartConnectionsCloseVerb.cs
- TableLayout.cs
- SqlDataSourceSelectingEventArgs.cs
- WorkflowNamespace.cs
- RequestedSignatureDialog.cs
- ExtensionQuery.cs
- WorkflowInstance.cs
- RemotingAttributes.cs
- DataList.cs
- CommonXSendMessage.cs
- DefaultObjectSerializer.cs
- LOSFormatter.cs
- WindowsAuthenticationEventArgs.cs
- DataObjectEventArgs.cs
- Attachment.cs
- ColumnResult.cs
- Point.cs
- pingexception.cs
- FieldNameLookup.cs
- ContentType.cs
- InputScopeConverter.cs
- DataGridViewCell.cs
- SqlNotificationRequest.cs
- CodeTypeDeclaration.cs
- HtmlForm.cs
- BitmapVisualManager.cs
- TrackingStringDictionary.cs
- TopClause.cs
- Menu.cs
- ColorTransformHelper.cs
- TraceSection.cs
- CodePageUtils.cs
- CounterSetInstanceCounterDataSet.cs
- AdvancedBindingPropertyDescriptor.cs
- login.cs
- DefaultWorkflowSchedulerService.cs
- FormsIdentity.cs
- WarningException.cs
- WindowsProgressbar.cs
- HostedHttpRequestAsyncResult.cs
- TextReader.cs
- FilterQuery.cs
- TextAutomationPeer.cs
- EndpointIdentityExtension.cs
- DesignerToolboxInfo.cs
- Token.cs
- Button.cs
- LifetimeServices.cs
- ServiceAppDomainAssociationProvider.cs
- DataContractJsonSerializerOperationBehavior.cs
- UrlPath.cs
- TypedLocationWrapper.cs
- ControlBuilder.cs
- PageParserFilter.cs
- WriteTimeStream.cs
- AVElementHelper.cs
- IOThreadTimer.cs
- TargetException.cs
- IndependentAnimationStorage.cs
- QueuedDeliveryRequirementsMode.cs
- FileChangesMonitor.cs
- GroupBoxRenderer.cs
- InternalPermissions.cs
- DataGridViewSelectedRowCollection.cs
- HuffmanTree.cs
- TableItemPattern.cs
- ScaleTransform3D.cs
- DataSetSchema.cs
- XmlUtf8RawTextWriter.cs
- COMException.cs
- WSTransactionSection.cs
- WebPartCloseVerb.cs
- LocationReferenceValue.cs
- OdbcStatementHandle.cs
- DbConnectionPoolCounters.cs
- MetabaseSettingsIis7.cs
- ExtendedPropertyInfo.cs
- AstNode.cs
- WebEvents.cs
- Literal.cs
- CalendarDesigner.cs
- EventQueueState.cs
- SystemInfo.cs
- Canvas.cs
- AddInPipelineAttributes.cs
- Attributes.cs
- OverlappedAsyncResult.cs