Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // 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
- GenericTypeParameterBuilder.cs
- CompositeCollection.cs
- ClientOptions.cs
- DataBinder.cs
- RemotingSurrogateSelector.cs
- ConnectionPoint.cs
- ZoneMembershipCondition.cs
- EventPropertyMap.cs
- COM2Properties.cs
- Repeater.cs
- EmptyControlCollection.cs
- TextTreeUndoUnit.cs
- SeekStoryboard.cs
- StateRuntime.cs
- IList.cs
- CustomAttribute.cs
- ProgressBarRenderer.cs
- Rectangle.cs
- TableStyle.cs
- XmlSchemaException.cs
- SpeechRecognizer.cs
- OutputCacheProfile.cs
- HashCodeCombiner.cs
- SmiXetterAccessMap.cs
- SmiEventSink_Default.cs
- Manipulation.cs
- XamlBuildProvider.cs
- UnmanagedMemoryStreamWrapper.cs
- RoutedPropertyChangedEventArgs.cs
- SelfIssuedAuthRSAPKCS1SignatureDeformatter.cs
- ValidatingReaderNodeData.cs
- SerializationException.cs
- QilPatternVisitor.cs
- ResolvedKeyFrameEntry.cs
- HttpListenerRequestTraceRecord.cs
- WebPartConnectionCollection.cs
- PageStatePersister.cs
- XmlSchemaAttributeGroup.cs
- KeyPullup.cs
- BufferedWebEventProvider.cs
- Point.cs
- ActivityStateQuery.cs
- OdbcException.cs
- DefaultBinder.cs
- AssemblyInfo.cs
- InstanceLockLostException.cs
- altserialization.cs
- AppDomainCompilerProxy.cs
- ObjectToken.cs
- LayoutSettings.cs
- SqlDataReaderSmi.cs
- CodeVariableReferenceExpression.cs
- FileLevelControlBuilderAttribute.cs
- DbConnectionStringBuilder.cs
- EdmRelationshipRoleAttribute.cs
- EntityDataReader.cs
- ConditionBrowserDialog.cs
- CLRBindingWorker.cs
- ToolCreatedEventArgs.cs
- CodeExporter.cs
- StringBuilder.cs
- InfoCardXmlSerializer.cs
- OperationAbortedException.cs
- FileSystemEventArgs.cs
- DataSourceExpressionCollection.cs
- TableCellCollection.cs
- FacetEnabledSchemaElement.cs
- IntSumAggregationOperator.cs
- XPathScanner.cs
- ActivityExecutorOperation.cs
- OleDragDropHandler.cs
- WebPartsPersonalizationAuthorization.cs
- Assert.cs
- DragEvent.cs
- CorrelationHandle.cs
- cookiecontainer.cs
- WorkflowDesigner.cs
- TableCellAutomationPeer.cs
- AesManaged.cs
- DrawingAttributesDefaultValueFactory.cs
- BindingOperations.cs
- KnownBoxes.cs
- Utils.cs
- ReflectTypeDescriptionProvider.cs
- StateMachineExecutionState.cs
- DataSetViewSchema.cs
- RectangleGeometry.cs
- NavigationHelper.cs
- Socket.cs
- COSERVERINFO.cs
- DbParameterHelper.cs
- Metadata.cs
- FrameSecurityDescriptor.cs
- FocusWithinProperty.cs
- DataGridViewBindingCompleteEventArgs.cs
- RemotingException.cs
- Cursor.cs
- GuidelineCollection.cs
- MarkerProperties.cs
- ApplicationDirectoryMembershipCondition.cs