예제 #1
0
        private static BodyReadStream InternalTryCreateBodyStream(ICoreItem coreItem, BodyReadConfiguration configuration, bool createEmtpyStreamIfNotFound, long?length)
        {
            BodyReadStream result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                Stream stream = BodyReadStream.OpenBodyStream(coreItem);
                disposeGuard.Add <Stream>(stream);
                Stream stream2 = stream;
                if (stream2 == null)
                {
                    if (!createEmtpyStreamIfNotFound)
                    {
                        return(null);
                    }
                    stream2 = Body.GetEmptyStream();
                }
                ConversionCallbackBase conversionCallbackBase;
                Stream disposable = BodyReadDelegates.CreateStream(coreItem, configuration, stream2, out conversionCallbackBase);
                disposeGuard.Add <Stream>(disposable);
                BodyReadStream bodyReadStream = new BodyReadStream(stream, disposable, conversionCallbackBase, length);
                disposeGuard.Add <BodyReadStream>(bodyReadStream);
                disposeGuard.Success();
                result = bodyReadStream;
            }
            return(result);
        }
예제 #2
0
 internal BodyTextReader(ICoreItem coreItem, BodyReadConfiguration configuration, Stream inputStream)
 {
     using (DisposeGuard disposeGuard = this.Guard())
     {
         Stream     stream     = null;
         TextReader textReader = null;
         bool       flag       = false;
         this.disposeTracker = this.GetDisposeTracker();
         try
         {
             if (inputStream == null)
             {
                 stream      = BodyReadStream.OpenBodyStream(coreItem);
                 inputStream = stream;
             }
             if (inputStream == null)
             {
                 inputStream = Body.GetEmptyStream();
             }
             textReader = BodyReadDelegates.CreateReader(coreItem, configuration, inputStream, out this.conversionCallbacks);
             flag       = true;
         }
         finally
         {
             if (!flag && stream != null)
             {
                 stream.Dispose();
             }
         }
         this.reader     = textReader;
         this.bodyStream = stream;
         this.isDisposed = false;
         disposeGuard.Success();
     }
 }
예제 #3
0
        internal static BodyReadStream TryCreateBodyReadStream(ICoreItem coreItem, BodyReadConfiguration configuration, bool createEmtpyStreamIfNotFound)
        {
            BodyReadStream bodyReadStream = BodyReadStream.InternalTryCreateBodyStream(coreItem, configuration, createEmtpyStreamIfNotFound, null);

            if (configuration.ShouldCalculateLength)
            {
                long streamLength = BodyReadStream.GetStreamLength(bodyReadStream);
                bodyReadStream.Dispose();
                bodyReadStream = BodyReadStream.InternalTryCreateBodyStream(coreItem, configuration, createEmtpyStreamIfNotFound, new long?(streamLength));
            }
            return(bodyReadStream);
        }
예제 #4
0
        private static long GetStreamLength(BodyReadStream stream)
        {
            if (stream == null)
            {
                return(0L);
            }
            long result;

            using (Stream stream2 = new BodyStreamSizeCounter(null))
            {
                result = Util.StreamHandler.CopyStreamData(stream, stream2);
            }
            return(result);
        }
예제 #5
0
        private Stream InternalOpenReadStream(BodyReadConfiguration configuration, bool createEmptyStreamIfNotFound)
        {
            Body.CheckNull(configuration, "configuration");
            this.CheckStreamingExceptions();
            Stream result;

            lock (this.bodyStreamsLock)
            {
                this.CheckOpenBodyStreamForRead();
                BodyReadStream bodyReadStream = BodyReadStream.TryCreateBodyReadStream(this.coreItem, configuration, createEmptyStreamIfNotFound);
                this.bodyReadStreams.Add(bodyReadStream);
                result = bodyReadStream;
            }
            return(result);
        }
예제 #6
0
        public int GetLastNBytesAsString(int lastNBytesToRead, out string readString)
        {
            int result;

            using (Stream stream = BodyReadStream.OpenBodyStream(this.coreItem))
            {
                readString = null;
                byte[] bytes;
                int    num = Util.StreamHandler.ReadLastBytesOfStream(stream, lastNBytesToRead, out bytes);
                if (num > 0)
                {
                    readString = this.GetBodyEncoding().GetString(bytes, 0, num);
                }
                result = num;
            }
            return(result);
        }