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
- CreateUserWizard.cs
- QilInvokeEarlyBound.cs
- path.cs
- Converter.cs
- XmlSerializerAssemblyAttribute.cs
- UnsafeNativeMethods.cs
- EmptyControlCollection.cs
- BamlLocalizableResource.cs
- Cursors.cs
- HitTestWithPointDrawingContextWalker.cs
- ContractCodeDomInfo.cs
- RC2CryptoServiceProvider.cs
- TcpTransportBindingElement.cs
- DesignUtil.cs
- MetadataCollection.cs
- ContextMenuService.cs
- PreviewControlDesigner.cs
- NameObjectCollectionBase.cs
- FailedToStartupUIException.cs
- DispatcherFrame.cs
- XsltFunctions.cs
- BinaryObjectWriter.cs
- XamlStream.cs
- safex509handles.cs
- ThreadInterruptedException.cs
- Lease.cs
- BuilderInfo.cs
- mediaeventshelper.cs
- Block.cs
- OletxTransactionManager.cs
- BindingExpressionBase.cs
- TrustLevel.cs
- SymmetricAlgorithm.cs
- DBPropSet.cs
- VerificationException.cs
- OdbcError.cs
- HtmlEmptyTagControlBuilder.cs
- IRCollection.cs
- ExecutedRoutedEventArgs.cs
- DeviceFilterEditorDialog.cs
- AppDomainFactory.cs
- SQLCharsStorage.cs
- ConnectionInterfaceCollection.cs
- HttpDictionary.cs
- Propagator.JoinPropagator.cs
- ReplyChannelBinder.cs
- TTSEvent.cs
- CategoryAttribute.cs
- QuestionEventArgs.cs
- ConditionalAttribute.cs
- BaseConfigurationRecord.cs
- WindowsUpDown.cs
- TabPage.cs
- FamilyTypefaceCollection.cs
- WinInet.cs
- WindowsTooltip.cs
- EncodingTable.cs
- MethodExpr.cs
- SetterBase.cs
- ErrorWebPart.cs
- ListBase.cs
- ImageResources.Designer.cs
- ZoneIdentityPermission.cs
- ServiceMemoryGates.cs
- CultureSpecificCharacterBufferRange.cs
- MetadataImporterQuotas.cs
- MediaSystem.cs
- FlatButtonAppearance.cs
- ClientUrlResolverWrapper.cs
- NameSpaceEvent.cs
- SafeTokenHandle.cs
- coordinator.cs
- ListControlActionList.cs
- ServicePoint.cs
- ImageSource.cs
- XmlHierarchicalDataSourceView.cs
- SignedXml.cs
- SqlUserDefinedTypeAttribute.cs
- MaskedTextBoxTextEditor.cs
- HeaderedItemsControl.cs
- CapabilitiesUse.cs
- DbConnectionOptions.cs
- ServiceDesigner.cs
- TableLayoutSettingsTypeConverter.cs
- FormClosingEvent.cs
- WebEventTraceProvider.cs
- EventTask.cs
- newitemfactory.cs
- SecureConversationDriver.cs
- loginstatus.cs
- InputManager.cs
- ImageAnimator.cs
- ReachDocumentSequenceSerializerAsync.cs
- InstanceData.cs
- Base64Decoder.cs
- ImplicitInputBrush.cs
- WebServiceEndpoint.cs
- ProcessHostConfigUtils.cs
- ToolStripCollectionEditor.cs
- CodeRegionDirective.cs