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
- SystemGatewayIPAddressInformation.cs
- DataServiceClientException.cs
- CompilerWrapper.cs
- MissingManifestResourceException.cs
- Event.cs
- OpCopier.cs
- PerformanceCounterLib.cs
- CompoundFileIOPermission.cs
- QueryUtil.cs
- XmlDataCollection.cs
- FrameSecurityDescriptor.cs
- ValidationResult.cs
- ManagementOptions.cs
- TextLine.cs
- CaseStatement.cs
- RecipientInfo.cs
- ProviderCommandInfoUtils.cs
- PrinterResolution.cs
- ParameterToken.cs
- Graphics.cs
- SchemaDeclBase.cs
- AutomationIdentifier.cs
- NamespaceEmitter.cs
- XPathPatternParser.cs
- DynamicUpdateCommand.cs
- BooleanAnimationBase.cs
- EntityDataSourceContextDisposingEventArgs.cs
- EmptyStringExpandableObjectConverter.cs
- EntityDataSourceContainerNameConverter.cs
- MimeXmlReflector.cs
- ElementProxy.cs
- initElementDictionary.cs
- MailSettingsSection.cs
- TextServicesDisplayAttribute.cs
- SerializationSectionGroup.cs
- unsafenativemethodsother.cs
- SettingsProperty.cs
- NumberAction.cs
- ImportOptions.cs
- HtmlInputRadioButton.cs
- DictionaryContent.cs
- future.cs
- XamlPointCollectionSerializer.cs
- WorkflowMarkupSerializer.cs
- TaskFormBase.cs
- ComponentResourceManager.cs
- HttpFileCollection.cs
- XmlSchemaException.cs
- EntityParameterCollection.cs
- XmlLinkedNode.cs
- AssemblyAttributesGoHere.cs
- TypeUsage.cs
- CheckBox.cs
- OracleString.cs
- MessageContractImporter.cs
- BindingCompleteEventArgs.cs
- XmlSchemaAnnotation.cs
- XmlSchemaInclude.cs
- RangeValidator.cs
- DataServiceContext.cs
- ExpressionParser.cs
- Regex.cs
- MetadataArtifactLoaderCompositeFile.cs
- GlyphRunDrawing.cs
- WebScriptMetadataMessageEncoderFactory.cs
- ContextCorrelationInitializer.cs
- CodeArrayIndexerExpression.cs
- SafePEFileHandle.cs
- Parser.cs
- Int64Converter.cs
- LazyTextWriterCreator.cs
- PtsHost.cs
- RemotingException.cs
- PathGradientBrush.cs
- Convert.cs
- ListDictionaryInternal.cs
- DirectoryInfo.cs
- RuleEngine.cs
- SimpleRecyclingCache.cs
- EncoderParameter.cs
- SoapAttributeOverrides.cs
- tabpagecollectioneditor.cs
- BindingBase.cs
- Wow64ConfigurationLoader.cs
- Rect3DConverter.cs
- DatePickerDateValidationErrorEventArgs.cs
- SiteMapDataSource.cs
- ISAPIApplicationHost.cs
- MatrixAnimationUsingPath.cs
- VerbConverter.cs
- DefaultSection.cs
- SizeF.cs
- ActionFrame.cs
- PageCanvasSize.cs
- PropertyCollection.cs
- ServicePoint.cs
- CustomErrorCollection.cs
- ServiceEndpointElement.cs
- SerializationInfoEnumerator.cs
- BufferedGraphicsManager.cs