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
- FactoryRecord.cs
- RSAOAEPKeyExchangeDeformatter.cs
- VirtualizedCellInfoCollection.cs
- PartitionResolver.cs
- ErrorItem.cs
- Win32.cs
- DocumentCollection.cs
- METAHEADER.cs
- WindowsGrip.cs
- TextParaClient.cs
- BroadcastEventHelper.cs
- XamlSerializationHelper.cs
- EditorPart.cs
- SimpleApplicationHost.cs
- DesignerTransaction.cs
- PropertyValueUIItem.cs
- TextElementCollection.cs
- TypeSystemHelpers.cs
- Tag.cs
- TableItemPatternIdentifiers.cs
- ThicknessConverter.cs
- DispatchChannelSink.cs
- OdbcStatementHandle.cs
- TableRowCollection.cs
- SortedSet.cs
- Stroke2.cs
- DataGridSortingEventArgs.cs
- WindowsStatic.cs
- SortQuery.cs
- FieldReference.cs
- validation.cs
- XhtmlBasicCalendarAdapter.cs
- RelatedCurrencyManager.cs
- _Win32.cs
- Compiler.cs
- DoubleConverter.cs
- XamlStream.cs
- CleanUpVirtualizedItemEventArgs.cs
- TreeNodeClickEventArgs.cs
- FlowDocumentPaginator.cs
- RectangleGeometry.cs
- SHA1.cs
- XPathConvert.cs
- DatagridviewDisplayedBandsData.cs
- DeferredTextReference.cs
- UTF8Encoding.cs
- HttpApplicationFactory.cs
- ButtonPopupAdapter.cs
- XPathChildIterator.cs
- SizeConverter.cs
- PlainXmlDeserializer.cs
- ZoomPercentageConverter.cs
- ImageListImageEditor.cs
- wgx_commands.cs
- CngProperty.cs
- ListViewUpdatedEventArgs.cs
- DoubleAnimationUsingPath.cs
- ReaderOutput.cs
- ExpandoObject.cs
- NotSupportedException.cs
- RegisteredHiddenField.cs
- VisualStyleElement.cs
- HeaderCollection.cs
- CharacterBufferReference.cs
- ConfigXmlText.cs
- UIElementAutomationPeer.cs
- CommandValueSerializer.cs
- CommandID.cs
- NativeObjectSecurity.cs
- GroupBox.cs
- WebContentFormatHelper.cs
- ProfilePropertyNameValidator.cs
- SqlBuilder.cs
- BaseCodeDomTreeGenerator.cs
- ExceptQueryOperator.cs
- EntityTypeEmitter.cs
- BaseDataList.cs
- RuleSettings.cs
- AutomationAttributeInfo.cs
- HelpProvider.cs
- SelectQueryOperator.cs
- Pkcs7Recipient.cs
- InvariantComparer.cs
- SqlConnectionPoolProviderInfo.cs
- ResourceAttributes.cs
- SourceFileBuildProvider.cs
- ObjectTokenCategory.cs
- iisPickupDirectory.cs
- ClusterRegistryConfigurationProvider.cs
- TogglePatternIdentifiers.cs
- InputElement.cs
- FacetDescriptionElement.cs
- ChtmlLinkAdapter.cs
- XmlElementAttribute.cs
- HashCodeCombiner.cs
- FormatSettings.cs
- XmlNamedNodeMap.cs
- XmlTextReader.cs
- FrameworkObject.cs
- LabelDesigner.cs