Ejemplo n.º 1
0
        /// <summary>
        /// Считывает поток данных файла из блоба.
        /// </summary>
        /// <param name="fileMetadata">Метаданные файла.</param>
        /// <returns></returns>
        internal Stream ReadStream(IBlobFileMetadata fileMetadata)
        {
            if (fileMetadata == null)
            {
                throw new ArgumentNullException("fileMetadata");
            }

            //поток закрывает объект, предоставляющий средства потоковой передачи
            FileStream        fs            = this.File.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BlobStreamAdapter streamAdapter = new BlobStreamAdapter(fs);
            PartitionStream   stream        = streamAdapter.ReadStream(fileMetadata);

            return(stream);
        }
Ejemplo n.º 2
0
        internal PartitionStream ReadStream(IBlobFileMetadata fileMetadata)
        {
            if (fileMetadata == null)
            {
                throw new ArgumentNullException("fileMetadata");
            }

            if (fileMetadata.BlobStartPosition >= fileMetadata.BlobEndPosition)
            {
                throw new Exception(string.Format("Индекс начала файла не может быть равным или больше индекса окончания файла"));
            }

            //поток закрывает объект, предоставляющий средства потоковой передачи
            IBlobFileHeader fileHeader           = (IBlobFileHeader)this.GetFileHeader(fileMetadata.BlobStartPosition);
            long            contentStartPosition = fileMetadata.BlobStartPosition + BlobStreamAdapter.SystemHeaderLength + fileHeader.HeaderLength;
            PartitionStream stream = new PartitionStream(this.BlobStream, contentStartPosition, fileMetadata.Size);

            return(stream);
        }