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
- RecognizedWordUnit.cs
- SynchronizationContext.cs
- storepermission.cs
- NameService.cs
- TextTreeText.cs
- ByteStorage.cs
- OutputCacheProfile.cs
- SmiEventSink_DeferedProcessing.cs
- ProtocolsConfigurationHandler.cs
- xdrvalidator.cs
- ControlCachePolicy.cs
- Action.cs
- CompilationUnit.cs
- Int32Converter.cs
- AppDomain.cs
- AdCreatedEventArgs.cs
- AnnotationResourceChangedEventArgs.cs
- LocalizationParserHooks.cs
- QueryCorrelationInitializer.cs
- _SafeNetHandles.cs
- DataServicePagingProviderWrapper.cs
- MimeTypeMapper.cs
- CopyNodeSetAction.cs
- AutoGeneratedFieldProperties.cs
- securitycriticaldataformultiplegetandset.cs
- UTF8Encoding.cs
- CompilerGlobalScopeAttribute.cs
- OdbcDataAdapter.cs
- AuthenticationManager.cs
- XhtmlBasicTextBoxAdapter.cs
- PartialCachingAttribute.cs
- IndexerNameAttribute.cs
- precedingquery.cs
- TemplateInstanceAttribute.cs
- XmlSchemaDocumentation.cs
- SizeAnimationUsingKeyFrames.cs
- ComplexBindingPropertiesAttribute.cs
- WorkflowIdleBehavior.cs
- SynchronousChannel.cs
- Component.cs
- MetadataSet.cs
- SoapIgnoreAttribute.cs
- MouseGestureConverter.cs
- PauseStoryboard.cs
- RoleServiceManager.cs
- FrameworkElement.cs
- basevalidator.cs
- ScrollData.cs
- KnownBoxes.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- SerializerDescriptor.cs
- SoapEnumAttribute.cs
- XmlC14NWriter.cs
- WindowsListBox.cs
- MetaColumn.cs
- Triangle.cs
- ResourceReferenceExpressionConverter.cs
- ListViewItemSelectionChangedEvent.cs
- NavigationPropertySingletonExpression.cs
- DesignerObjectListAdapter.cs
- ActivityStateQuery.cs
- TemplateControlParser.cs
- SerializerDescriptor.cs
- ApplicationFileCodeDomTreeGenerator.cs
- XmlSerializerFactory.cs
- DataGridViewHitTestInfo.cs
- IChannel.cs
- Binding.cs
- SqlGenerator.cs
- Marshal.cs
- MethodRental.cs
- MasterPage.cs
- PassportPrincipal.cs
- DynamicQueryStringParameter.cs
- CaseCqlBlock.cs
- PathSegment.cs
- KeyPressEvent.cs
- ProxyAttribute.cs
- PropertyDescriptorGridEntry.cs
- HebrewCalendar.cs
- XPathNodeList.cs
- ScrollChrome.cs
- UniformGrid.cs
- BinaryObjectReader.cs
- AlphaSortedEnumConverter.cs
- DBSqlParserColumn.cs
- HotSpotCollection.cs
- ValidationPropertyAttribute.cs
- MsmqReceiveHelper.cs
- ToolStripDropDownMenu.cs
- XmlElementList.cs
- IApplicationTrustManager.cs
- MailAddressCollection.cs
- OwnerDrawPropertyBag.cs
- HttpHeaderCollection.cs
- PropertyTabAttribute.cs
- ReferencedType.cs
- LogArchiveSnapshot.cs
- UnsafeNativeMethods.cs
- Int64AnimationBase.cs