Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / FileRegion.cs / 1305376 / FileRegion.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IO.Log { using System; using System.Diagnostics; using System.IO; public sealed class FileRegion { long fileLength; string path; long offset; long length; byte[] fixedContent; internal FileRegion(long fileLength, string path, long offset, long length) { this.fileLength = fileLength; this.path = path; this.offset = offset; this.length = length; } internal FileRegion(long fileLength, string path, long offset, byte[] fixedContent) { this.fileLength = fileLength; this.path = path; this.offset = offset; this.length = fixedContent.LongLength; this.fixedContent = fixedContent; } public long FileLength { get { return this.fileLength; } } public long Offset { get { return this.offset; } } public string Path { get { return this.path; } } public Stream GetStream() { if (this.fixedContent != null) { return new MemoryStream(this.fixedContent, 0, this.fixedContent.Length, false, false); } else { Stream innerStream = new FileStream(this.path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); return new Substream(innerStream, this.offset, this.length); } } class Substream : Stream { Stream innerStream; long offset; long length; internal Substream(Stream innerStream, long offset, long length) { this.innerStream = innerStream; this.offset = offset; this.length = length; } public override bool CanRead { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanWrite { get { return false; } } public override long Length { get { return this.length; } } public override long Position { get { return this.innerStream.Position - this.offset; } set { this.innerStream.Position = value + this.offset; } } public override void Close() { this.innerStream.Close(); base.Close(); } public override void Flush() { this.innerStream.Flush(); } public override int Read(byte[] buffer, int offset, int count) { // Truncate read if it goes past the length of the // stream... // if (this.Length - this.Position < count) { count = checked((int)(this.Length - this.Position)); if (count < 0) return 0; } return this.innerStream.Read(buffer, offset, count); } public override long Seek(long offset, SeekOrigin origin) { if (origin == SeekOrigin.Begin) { offset += this.offset; } else if (origin == SeekOrigin.End) { offset = this.offset + this.length - offset; origin = SeekOrigin.Begin; } return this.innerStream.Seek(offset, origin); } public override void SetLength(long value) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported()); } public override void Write(byte[] buffer, int offset, int count) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported()); } public override void WriteByte(byte value) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported()); } } } } // 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
- InfoCardRSACryptoProvider.cs
- HMACSHA512.cs
- LogRecordSequence.cs
- ScrollViewer.cs
- CmsUtils.cs
- HasActivatableWorkflowEvent.cs
- RowToParametersTransformer.cs
- Membership.cs
- CompositeCollectionView.cs
- EntitySqlQueryCacheEntry.cs
- WorkflowTransactionService.cs
- TextEmbeddedObject.cs
- ApplicationContext.cs
- ConfigurationElementProperty.cs
- XmlILTrace.cs
- _DomainName.cs
- MexBindingElement.cs
- SplineKeyFrames.cs
- MarkupObject.cs
- SendKeys.cs
- PeerHopCountAttribute.cs
- AxImporter.cs
- TransactionBridgeSection.cs
- ButtonFlatAdapter.cs
- TreeSet.cs
- HtmlTableCell.cs
- CollectionBase.cs
- Composition.cs
- QilXmlWriter.cs
- ProgressChangedEventArgs.cs
- PolyQuadraticBezierSegment.cs
- FormsAuthenticationTicket.cs
- ZeroOpNode.cs
- Int64Converter.cs
- MultiView.cs
- ListItemConverter.cs
- ZoneButton.cs
- ResourceManagerWrapper.cs
- VectorConverter.cs
- KeyTimeConverter.cs
- BitmapFrameDecode.cs
- FileDialogCustomPlacesCollection.cs
- VerbConverter.cs
- DataGridHeaderBorder.cs
- BamlVersionHeader.cs
- XmlLangPropertyAttribute.cs
- IdentityReference.cs
- WebPartConnectionsCancelVerb.cs
- SubpageParagraph.cs
- WindowsPrincipal.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- CellIdBoolean.cs
- ToolBarButtonClickEvent.cs
- SqlGatherConsumedAliases.cs
- DependsOnAttribute.cs
- TreeNodeMouseHoverEvent.cs
- PolyQuadraticBezierSegment.cs
- SamlSerializer.cs
- Base64Stream.cs
- VariantWrapper.cs
- TemplatedAdorner.cs
- PropertyEntry.cs
- AutomationFocusChangedEventArgs.cs
- webproxy.cs
- SslSecurityTokenParameters.cs
- SHA512.cs
- XmlSchemas.cs
- ResourceCategoryAttribute.cs
- NativeWrapper.cs
- XmlSchemaComplexContentRestriction.cs
- TextRangeAdaptor.cs
- Underline.cs
- DataGridGeneralPage.cs
- BindingExpressionUncommonField.cs
- WrapPanel.cs
- ConfigurationManagerHelper.cs
- CharacterHit.cs
- DefaultShape.cs
- ContractNamespaceAttribute.cs
- FloaterBaseParaClient.cs
- ContractComponent.cs
- ViewStateChangedEventArgs.cs
- Object.cs
- UxThemeWrapper.cs
- QilSortKey.cs
- DrawListViewSubItemEventArgs.cs
- ProtocolsConfigurationHandler.cs
- LongTypeConverter.cs
- AssertFilter.cs
- SafeRegistryHandle.cs
- _SslSessionsCache.cs
- DesignTimeTemplateParser.cs
- JsonDeserializer.cs
- OdbcStatementHandle.cs
- ClientScriptManager.cs
- AggregateNode.cs
- TextTreeObjectNode.cs
- LocalizedNameDescriptionPair.cs
- AnimationStorage.cs
- HttpAsyncResult.cs