/// <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); }
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); }