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
- DetailsViewPagerRow.cs
- GlyphTypeface.cs
- CodeAttributeDeclarationCollection.cs
- EdmConstants.cs
- DetailsViewUpdatedEventArgs.cs
- CookielessData.cs
- ThemeableAttribute.cs
- FlowDocumentPaginator.cs
- DataGridViewCellValidatingEventArgs.cs
- GridViewAutoFormat.cs
- WorkflowDefinitionDispenser.cs
- PropertyEmitter.cs
- SByteStorage.cs
- IndexedEnumerable.cs
- OrderedDictionaryStateHelper.cs
- ClientSettings.cs
- DBConnection.cs
- InternalsVisibleToAttribute.cs
- RegexWriter.cs
- TypeElementCollection.cs
- _DisconnectOverlappedAsyncResult.cs
- RecipientInfo.cs
- ComponentConverter.cs
- Compiler.cs
- TraceLevelStore.cs
- ProvidePropertyAttribute.cs
- ControlTemplate.cs
- QueryRewriter.cs
- RemoteWebConfigurationHostStream.cs
- TextModifier.cs
- PerfCounterSection.cs
- Quaternion.cs
- CalendarDesigner.cs
- Win32.cs
- DocumentsTrace.cs
- TypeValidationEventArgs.cs
- DynamicValidatorEventArgs.cs
- UnmanagedMemoryStream.cs
- InternalControlCollection.cs
- LoggedException.cs
- Attributes.cs
- BaseParaClient.cs
- FormViewInsertedEventArgs.cs
- PrintDialog.cs
- QuaternionAnimationBase.cs
- AppSettingsExpressionBuilder.cs
- EdmProviderManifest.cs
- GregorianCalendarHelper.cs
- EntityDataSourceDataSelectionPanel.cs
- SQLInt16.cs
- HostProtectionException.cs
- Attachment.cs
- SecurityUtils.cs
- UserControlCodeDomTreeGenerator.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- SqlParameter.cs
- PackWebRequest.cs
- Collection.cs
- TiffBitmapDecoder.cs
- TableParagraph.cs
- FloaterBaseParaClient.cs
- ApplicationInfo.cs
- BufferModesCollection.cs
- CodeLinePragma.cs
- ObjectSet.cs
- SpeechDetectedEventArgs.cs
- FormsAuthenticationConfiguration.cs
- CloudCollection.cs
- UnmanagedBitmapWrapper.cs
- securitycriticaldataClass.cs
- HandlerFactoryWrapper.cs
- SocketPermission.cs
- X509SecurityTokenParameters.cs
- StringValidatorAttribute.cs
- Icon.cs
- XmlObjectSerializerReadContextComplex.cs
- ModelVisual3D.cs
- ReflectEventDescriptor.cs
- RequestCacheValidator.cs
- RenderContext.cs
- XmlSchemaComplexType.cs
- ColorConverter.cs
- ConfigXmlElement.cs
- DeobfuscatingStream.cs
- ProfileGroupSettingsCollection.cs
- ContextMenuAutomationPeer.cs
- SpellerStatusTable.cs
- PathSegmentCollection.cs
- EntityContainerEmitter.cs
- EdmError.cs
- CalendarAutoFormatDialog.cs
- SqlNode.cs
- AssociationSet.cs
- MapPathBasedVirtualPathProvider.cs
- UInt64.cs
- TokenizerHelper.cs
- FixedHighlight.cs
- CharAnimationUsingKeyFrames.cs
- WsatTransactionInfo.cs
- QueryAccessibilityHelpEvent.cs