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
- NamedPipeProcessProtocolHandler.cs
- EventDescriptorCollection.cs
- IdentityNotMappedException.cs
- DataReceivedEventArgs.cs
- RemotingConfiguration.cs
- IERequestCache.cs
- HwndProxyElementProvider.cs
- XmlSchemaComplexContent.cs
- TableAdapterManagerMethodGenerator.cs
- RegexCompilationInfo.cs
- TemplateBindingExpression.cs
- WebServiceParameterData.cs
- LinqDataSource.cs
- AuthenticationModuleElement.cs
- TableParagraph.cs
- PageStatePersister.cs
- BamlMapTable.cs
- MarkedHighlightComponent.cs
- SqlRemoveConstantOrderBy.cs
- PerspectiveCamera.cs
- TextModifierScope.cs
- CodePageUtils.cs
- StyleConverter.cs
- DetailsViewModeEventArgs.cs
- ReaderOutput.cs
- WebPartHelpVerb.cs
- DummyDataSource.cs
- SapiAttributeParser.cs
- StringArrayConverter.cs
- ExitEventArgs.cs
- Endpoint.cs
- Container.cs
- CngKeyBlobFormat.cs
- XmlChoiceIdentifierAttribute.cs
- SchemaCollectionCompiler.cs
- FilterException.cs
- UnescapedXmlDiagnosticData.cs
- XmlComplianceUtil.cs
- AssemblyNameProxy.cs
- MaskedTextBoxDesigner.cs
- Section.cs
- SoapCodeExporter.cs
- FrameworkRichTextComposition.cs
- DeploymentSectionCache.cs
- HtmlInputReset.cs
- BevelBitmapEffect.cs
- XmlSerializerVersionAttribute.cs
- IndexObject.cs
- UnsafeNativeMethods.cs
- Padding.cs
- StringValidator.cs
- StaticExtension.cs
- EdmProperty.cs
- ContainerActivationHelper.cs
- OleDbParameter.cs
- ListViewItemEventArgs.cs
- UriExt.cs
- CompModHelpers.cs
- XmlNavigatorStack.cs
- Pair.cs
- FixedHyperLink.cs
- AutomationIdentifierGuids.cs
- MissingSatelliteAssemblyException.cs
- ClassData.cs
- ConfigViewGenerator.cs
- TextSimpleMarkerProperties.cs
- UndirectedGraph.cs
- FlowLayoutPanelDesigner.cs
- HttpCapabilitiesSectionHandler.cs
- NumberFormatter.cs
- MouseOverProperty.cs
- CommonObjectSecurity.cs
- ProxyGenerationError.cs
- ReachPageContentCollectionSerializerAsync.cs
- VectorAnimationUsingKeyFrames.cs
- FrugalList.cs
- FontFaceLayoutInfo.cs
- MonitoringDescriptionAttribute.cs
- MexBindingBindingCollectionElement.cs
- BindingRestrictions.cs
- HttpResponseInternalWrapper.cs
- SimpleApplicationHost.cs
- PropertyPathConverter.cs
- XmlCountingReader.cs
- IriParsingElement.cs
- __Filters.cs
- ListItem.cs
- Int32CAMarshaler.cs
- ItemType.cs
- _StreamFramer.cs
- smtpconnection.cs
- LockCookie.cs
- HtmlTableRowCollection.cs
- IResourceProvider.cs
- WebResponse.cs
- StandardToolWindows.cs
- TreeViewItem.cs
- DataServiceRequestOfT.cs
- ConstructorNeedsTagAttribute.cs
- GlyphRunDrawing.cs