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
- BindUriHelper.cs
- WebPartAddingEventArgs.cs
- DataControlFieldHeaderCell.cs
- Bidi.cs
- ConstNode.cs
- RegexWorker.cs
- DiagnosticTraceSource.cs
- DataServiceConfiguration.cs
- Section.cs
- HtmlShim.cs
- DockPattern.cs
- StorageComplexPropertyMapping.cs
- QilTernary.cs
- StructuralType.cs
- AuthenticationModuleElementCollection.cs
- EntityTypeBase.cs
- IgnoreFileBuildProvider.cs
- _BasicClient.cs
- ConstraintStruct.cs
- AggregationMinMaxHelpers.cs
- Dynamic.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- PersonalizableTypeEntry.cs
- UniformGrid.cs
- rsa.cs
- InstanceKeyView.cs
- StorageRoot.cs
- ScriptingScriptResourceHandlerSection.cs
- SessionStateContainer.cs
- MobileControl.cs
- InputScopeManager.cs
- LinkArea.cs
- CompressionTransform.cs
- ProtocolsConfigurationEntry.cs
- SessionState.cs
- PermissionRequestEvidence.cs
- DataPagerFieldCommandEventArgs.cs
- DelegatingTypeDescriptionProvider.cs
- TreeNodeCollection.cs
- Vector3D.cs
- PropertyEmitterBase.cs
- Accessible.cs
- XmlQualifiedNameTest.cs
- AttributeEmitter.cs
- ToolStripManager.cs
- InstanceData.cs
- OutOfProcStateClientManager.cs
- BitmapCodecInfoInternal.cs
- XmlMessageFormatter.cs
- RuleElement.cs
- SqlDataSource.cs
- UnescapedXmlDiagnosticData.cs
- GraphicsPath.cs
- DetailsViewInsertEventArgs.cs
- FontEmbeddingManager.cs
- ApplicationException.cs
- Automation.cs
- SubMenuStyleCollection.cs
- ContractCodeDomInfo.cs
- EventEntry.cs
- Constant.cs
- ZipIOExtraField.cs
- TypeDescriptionProviderAttribute.cs
- DefinitionUpdate.cs
- CommandBindingCollection.cs
- QilExpression.cs
- SiteMapNodeCollection.cs
- TemplateParser.cs
- CompositeScriptReferenceEventArgs.cs
- DecryptedHeader.cs
- IntSecurity.cs
- SrgsItemList.cs
- MessageQueueEnumerator.cs
- OdbcPermission.cs
- SchemaImporterExtensionsSection.cs
- DodSequenceMerge.cs
- XPathAncestorQuery.cs
- MultipleViewProviderWrapper.cs
- CultureInfoConverter.cs
- EdmComplexPropertyAttribute.cs
- Hashtable.cs
- AutoSizeToolBoxItem.cs
- SqlFunctionAttribute.cs
- HuffModule.cs
- AstNode.cs
- MissingSatelliteAssemblyException.cs
- MultilineStringEditor.cs
- UIElementHelper.cs
- InputManager.cs
- DataGridViewComboBoxCell.cs
- ResourceWriter.cs
- SiteOfOriginPart.cs
- SerializationEventsCache.cs
- CallTemplateAction.cs
- HttpApplicationFactory.cs
- TemplateField.cs
- CategoryNameCollection.cs
- ObjectSecurity.cs
- SafeViewOfFileHandle.cs
- SimpleHandlerFactory.cs