Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Log / System / IO / Log / FileRegion.cs / 1 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- cookiecollection.cs
- ControlAdapter.cs
- WebPartDisplayModeCollection.cs
- ClientRoleProvider.cs
- DataSourceHelper.cs
- XmlEntity.cs
- ToolStripItemEventArgs.cs
- UnmanagedMemoryStreamWrapper.cs
- LinqDataView.cs
- DrawingContext.cs
- RemotingServices.cs
- UrlEncodedParameterWriter.cs
- PropertyPath.cs
- Timer.cs
- DPCustomTypeDescriptor.cs
- IPEndPointCollection.cs
- MSAAWinEventWrap.cs
- ScriptResourceHandler.cs
- HyperLinkField.cs
- GrammarBuilder.cs
- SeekableReadStream.cs
- InternalConfigHost.cs
- ScrollBar.cs
- DropShadowEffect.cs
- IsolatedStorage.cs
- EdmTypeAttribute.cs
- VariableDesigner.xaml.cs
- CodeTypeDelegate.cs
- DecimalFormatter.cs
- XmlSchemaComplexContent.cs
- UnsafeNativeMethods.cs
- ConsumerConnectionPoint.cs
- OdbcConnectionHandle.cs
- ColumnWidthChangedEvent.cs
- BinHexEncoder.cs
- FontStretches.cs
- Lease.cs
- _AutoWebProxyScriptEngine.cs
- AsyncStreamReader.cs
- HeaderCollection.cs
- ItemAutomationPeer.cs
- BamlReader.cs
- ByValueEqualityComparer.cs
- TextEditorThreadLocalStore.cs
- CheckedListBox.cs
- RequestDescription.cs
- SvcMapFileSerializer.cs
- VirtualizedItemProviderWrapper.cs
- SchemaImporter.cs
- LazyTextWriterCreator.cs
- EdgeModeValidation.cs
- EntityDataSourceQueryBuilder.cs
- HttpCapabilitiesSectionHandler.cs
- HttpApplicationFactory.cs
- Base64Decoder.cs
- SwitchElementsCollection.cs
- Misc.cs
- UnmanagedMemoryStream.cs
- milexports.cs
- TextDecorationUnitValidation.cs
- BinaryMethodMessage.cs
- SchemaImporterExtension.cs
- TypeNameConverter.cs
- SupportingTokenBindingElement.cs
- MissingMethodException.cs
- XPathNode.cs
- IdentifierElement.cs
- DBConcurrencyException.cs
- LayoutInformation.cs
- BevelBitmapEffect.cs
- HttpHandlerAction.cs
- InteropAutomationProvider.cs
- DependencyObjectType.cs
- HyperLinkField.cs
- DataRowView.cs
- AnalyzedTree.cs
- BufferedWebEventProvider.cs
- UnmanagedMemoryStreamWrapper.cs
- GroupLabel.cs
- TouchEventArgs.cs
- Helper.cs
- AppearanceEditorPart.cs
- VectorAnimationBase.cs
- StylusPoint.cs
- PageContent.cs
- BitmapEditor.cs
- Utility.cs
- DataServiceException.cs
- ExpandedWrapper.cs
- WebSysDescriptionAttribute.cs
- StrictModeSecurityHeaderElementInferenceEngine.cs
- ConnectionPointConverter.cs
- ParseChildrenAsPropertiesAttribute.cs
- TargetConverter.cs
- ImmutableCommunicationTimeouts.cs
- Random.cs
- SaveFileDialog.cs
- OverflowException.cs
- XmlDocument.cs
- DiffuseMaterial.cs