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
- ObjectAnimationBase.cs
- SecurityRuntime.cs
- CompositionTarget.cs
- ObjectItemConventionAssemblyLoader.cs
- StreamReader.cs
- TreeIterators.cs
- TableStyle.cs
- SurrogateChar.cs
- SmtpReplyReaderFactory.cs
- ConnectionPoint.cs
- JoinElimination.cs
- XmlWriterTraceListener.cs
- AspNetPartialTrustHelpers.cs
- Decimal.cs
- MimeFormReflector.cs
- MessageDesigner.cs
- RequestQueryParser.cs
- XmlStreamNodeWriter.cs
- SystemUnicastIPAddressInformation.cs
- SchemaNamespaceManager.cs
- CryptoStream.cs
- DataServiceKeyAttribute.cs
- HostProtectionException.cs
- CodeEventReferenceExpression.cs
- SymmetricKeyWrap.cs
- HashAlgorithm.cs
- MetadataUtilsSmi.cs
- XmlSignatureProperties.cs
- SmtpFailedRecipientsException.cs
- RawKeyboardInputReport.cs
- StickyNoteContentControl.cs
- HtmlLink.cs
- MarkupObject.cs
- FixedSOMTableCell.cs
- Win32.cs
- SelfIssuedAuthProofToken.cs
- DictionaryMarkupSerializer.cs
- DragStartedEventArgs.cs
- XmlWrappingReader.cs
- DataSourceProvider.cs
- RecognizedPhrase.cs
- EventItfInfo.cs
- OleDragDropHandler.cs
- Listen.cs
- smtpconnection.cs
- XmlAttributeAttribute.cs
- JournalNavigationScope.cs
- TableProviderWrapper.cs
- ParameterRefs.cs
- Set.cs
- SymbolMethod.cs
- MailAddressCollection.cs
- DtdParser.cs
- Icon.cs
- SolidColorBrush.cs
- ArcSegment.cs
- CatalogPartChrome.cs
- SmiRecordBuffer.cs
- SecurityContextTokenValidationException.cs
- GridViewSortEventArgs.cs
- DictionaryBase.cs
- BitmapMetadataEnumerator.cs
- WinEventTracker.cs
- DesignerTransactionCloseEvent.cs
- GeometryDrawing.cs
- DataPagerFieldCommandEventArgs.cs
- FilterQuery.cs
- InkCanvasAutomationPeer.cs
- MediaElement.cs
- BaseWebProxyFinder.cs
- Material.cs
- InkCanvasInnerCanvas.cs
- PropertyItemInternal.cs
- RegionData.cs
- SingleAnimation.cs
- SafeFileHandle.cs
- HtmlElementEventArgs.cs
- CachedCompositeFamily.cs
- DataView.cs
- ZipIOLocalFileDataDescriptor.cs
- InheritanceAttribute.cs
- ComplexTypeEmitter.cs
- OutputCacheModule.cs
- JavascriptCallbackResponseProperty.cs
- BitmapPalettes.cs
- CodeMethodInvokeExpression.cs
- xamlnodes.cs
- ZipIOFileItemStream.cs
- FormViewUpdateEventArgs.cs
- TileBrush.cs
- HMACSHA512.cs
- AutomationEvent.cs
- DataPagerFieldCommandEventArgs.cs
- InputElement.cs
- WebPartUserCapability.cs
- HttpRequestBase.cs
- InfoCardListRequest.cs
- GatewayIPAddressInformationCollection.cs
- OneOfElement.cs
- DBParameter.cs