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
- SetterTriggerConditionValueConverter.cs
- MethodImplAttribute.cs
- JoinGraph.cs
- PageAsyncTaskManager.cs
- DesignerCatalogPartChrome.cs
- XmlNode.cs
- ScriptServiceAttribute.cs
- WebBrowserNavigatedEventHandler.cs
- SingleKeyFrameCollection.cs
- ProcessInputEventArgs.cs
- ColorConverter.cs
- ToolboxCategory.cs
- ProgressiveCrcCalculatingStream.cs
- FacetChecker.cs
- AttachmentCollection.cs
- ListControlDesigner.cs
- PageStatePersister.cs
- ToolStripItemDataObject.cs
- BoundsDrawingContextWalker.cs
- DateTimeUtil.cs
- Stylus.cs
- _Semaphore.cs
- JavaScriptObjectDeserializer.cs
- AncestorChangedEventArgs.cs
- CodeSubDirectoriesCollection.cs
- OSFeature.cs
- ExpressionVisitorHelpers.cs
- PlatformCulture.cs
- CollectionViewGroupRoot.cs
- DataGridPagerStyle.cs
- XmlWrappingReader.cs
- GeneralTransform3D.cs
- ComplexLine.cs
- PackageProperties.cs
- CodeGeneratorAttribute.cs
- HttpCookie.cs
- AutomationElementCollection.cs
- ControlAdapter.cs
- LightweightCodeGenerator.cs
- EncoderParameter.cs
- FontUnitConverter.cs
- SqlDataRecord.cs
- BindingListCollectionView.cs
- StreamingContext.cs
- SystemFonts.cs
- ResourceReader.cs
- TripleDESCryptoServiceProvider.cs
- WebPartTransformer.cs
- NamespaceDecl.cs
- entityreference_tresulttype.cs
- DataTablePropertyDescriptor.cs
- SelectionRangeConverter.cs
- validation.cs
- CurrencyWrapper.cs
- CodeExpressionCollection.cs
- CompModSwitches.cs
- VectorAnimationBase.cs
- NullableBoolConverter.cs
- DesignerHierarchicalDataSourceView.cs
- SerTrace.cs
- CollectionType.cs
- RtType.cs
- DataColumnMappingCollection.cs
- DataGrid.cs
- DragEvent.cs
- BinaryFormatter.cs
- CodeGroup.cs
- WebPartHeaderCloseVerb.cs
- __Error.cs
- COM2TypeInfoProcessor.cs
- DbConnectionPoolIdentity.cs
- InplaceBitmapMetadataWriter.cs
- RectangleGeometry.cs
- OdbcInfoMessageEvent.cs
- UserCancellationException.cs
- SiteMapDataSource.cs
- EnumBuilder.cs
- Currency.cs
- HtmlShim.cs
- NavigationProgressEventArgs.cs
- IntranetCredentialPolicy.cs
- NetTcpSection.cs
- KeyedHashAlgorithm.cs
- PowerStatus.cs
- SourceChangedEventArgs.cs
- QuaternionConverter.cs
- SubclassTypeValidatorAttribute.cs
- ToolStripItem.cs
- EventDescriptor.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- AuthStoreRoleProvider.cs
- SingleKeyFrameCollection.cs
- WebEncodingValidator.cs
- ButtonField.cs
- COM2ExtendedUITypeEditor.cs
- XPathDocumentIterator.cs
- RuleElement.cs
- TextFormatterHost.cs
- RowToParametersTransformer.cs
- Matrix3D.cs