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
- TypeFieldSchema.cs
- GacUtil.cs
- ALinqExpressionVisitor.cs
- X509Chain.cs
- FixedSOMTextRun.cs
- TextParaLineResult.cs
- EntityViewGenerator.cs
- DataGridViewCellLinkedList.cs
- brushes.cs
- XmlSchemaAnnotation.cs
- WpfKnownMemberInvoker.cs
- ValidationHelpers.cs
- DynamicPropertyHolder.cs
- DeviceFiltersSection.cs
- recordstate.cs
- loginstatus.cs
- recordstatescratchpad.cs
- SafeFileHandle.cs
- ListItemCollection.cs
- OutOfProcStateClientManager.cs
- LinqDataSourceDeleteEventArgs.cs
- PreProcessInputEventArgs.cs
- CopyOnWriteList.cs
- QilSortKey.cs
- StatusBarPanelClickEvent.cs
- EdmComplexTypeAttribute.cs
- XamlFilter.cs
- PathTooLongException.cs
- WSDualHttpSecurityElement.cs
- XamlInt32CollectionSerializer.cs
- FormViewPageEventArgs.cs
- DataTableTypeConverter.cs
- TextFormatterHost.cs
- MethodBody.cs
- TrackingMemoryStream.cs
- ErrorStyle.cs
- DeclaredTypeElement.cs
- PackageRelationshipCollection.cs
- ChannelManagerService.cs
- IDictionary.cs
- AuthStoreRoleProvider.cs
- WindowsListBox.cs
- TypeFieldSchema.cs
- BufferBuilder.cs
- PersonalizableAttribute.cs
- TableLayoutPanelCellPosition.cs
- StringKeyFrameCollection.cs
- FrameworkContextData.cs
- TransactionScope.cs
- SignedInfo.cs
- HttpProcessUtility.cs
- TableRowCollection.cs
- GridViewUpdatedEventArgs.cs
- DefaultWorkflowLoaderService.cs
- SerializationSectionGroup.cs
- Parser.cs
- ProjectionCamera.cs
- DragDeltaEventArgs.cs
- HtmlMeta.cs
- MethodCallTranslator.cs
- XComponentModel.cs
- ToolStrip.cs
- SQLBoolean.cs
- ObjectItemAttributeAssemblyLoader.cs
- TraceHelpers.cs
- TreeView.cs
- ExecutionEngineException.cs
- CodePrimitiveExpression.cs
- DES.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- ProfileSection.cs
- SystemFonts.cs
- ClientSponsor.cs
- DropDownList.cs
- SpeechEvent.cs
- System.Data.OracleClient_BID.cs
- Win32SafeHandles.cs
- Encoding.cs
- SqlBulkCopy.cs
- HelpPage.cs
- DataGridSortCommandEventArgs.cs
- PersistenceTypeAttribute.cs
- GridItem.cs
- ResourceDefaultValueAttribute.cs
- ViewValidator.cs
- TaskScheduler.cs
- DataList.cs
- LinkUtilities.cs
- BulletChrome.cs
- Exceptions.cs
- Int64AnimationUsingKeyFrames.cs
- DetailsViewPageEventArgs.cs
- DoubleAnimationUsingPath.cs
- IndividualDeviceConfig.cs
- FontNameEditor.cs
- SizeChangedEventArgs.cs
- Util.cs
- AttributeAction.cs
- CrossAppDomainChannel.cs
- BufferModesCollection.cs