/// <summary> /// Считывает поток данных версии файла из блоба. /// </summary> /// <param name="versionMetadata">Метаданные версии файла.</param> /// <returns></returns> internal Stream ReadStream(IBlobFileVersionMetadata versionMetadata) { if (versionMetadata == null) { throw new ArgumentNullException("versionMetadata"); } //поток закрывает объект, предоставляющий средства потоковой передачи FileStream fs = this.File.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BlobStreamAdapter streamAdapter = new BlobStreamAdapter(fs); PartitionStream stream = streamAdapter.ReadStream(versionMetadata); return(stream); }
internal byte[] Read(IBlobFileVersionMetadata versionMetadata) { if (versionMetadata == null) { throw new ArgumentNullException("versionMetadata"); } //содержимое файла return(this.ReadContent( versionMetadata.FileMetadata.UniqueID, versionMetadata.UniqueID, versionMetadata.BlobStartPosition, versionMetadata.BlobEndPosition)); }
/// <summary> /// Считывает поток данных версии файла. /// </summary> /// <param name="versionMetadata">Метаданные версии файла.</param> /// <returns></returns> public Stream ReadFileVersionStream(IFileVersionMetadata versionMetadata) { if (versionMetadata == null) { throw new ArgumentNullException("versionMetadata"); } this.Logger.WriteFormatMessage("ReadFileVersionStream:Начало чтения содержимого версии файла, folder.Url: {0}, version.UniqueID: {1}", versionMetadata.FileMetadata.FolderMetadata.Url, versionMetadata.UniqueID); IBlobFileVersionMetadata typedVersionMetadata = (IBlobFileVersionMetadata)versionMetadata; //получаем контейнер блобов Blob blob = this.GetBlob(typedVersionMetadata.BlobID); Stream stream = blob.ReadStream(typedVersionMetadata); this.Logger.WriteFormatMessage("ReadFileVersionStream:Окончание чтения содержимого версии файла, folder.Url: {0}, version.UniqueID: {1}", versionMetadata.FileMetadata.FolderMetadata.Url, versionMetadata.UniqueID); return(stream); }
internal PartitionStream ReadStream(IBlobFileVersionMetadata blobFileVersionMetadata) { if (blobFileVersionMetadata == null) { throw new ArgumentNullException("blobFileVersionMetadata"); } if (blobFileVersionMetadata.BlobStartPosition >= blobFileVersionMetadata.BlobEndPosition) { throw new Exception(string.Format("Индекс начала файла не может быть равным или больше индекса окончания файла")); } //поток закрывает объект, предоставляющий средства потоковой передачи IBlobFileHeader fileHeader = (IBlobFileHeader)this.GetFileHeader(blobFileVersionMetadata.BlobStartPosition); long contentStartPosition = blobFileVersionMetadata.BlobStartPosition + BlobStreamAdapter.SystemHeaderLength + fileHeader.HeaderLength; PartitionStream stream = new PartitionStream(this.BlobStream, contentStartPosition, blobFileVersionMetadata.Size); return(stream); }
private IFileVersionMetadata WriteInternal(IBlobFileMetadata blobFileMetadata, Stream stream, DateTime?remoteTimeCreated = null) { if (blobFileMetadata == null) { throw new ArgumentNullException("param"); } if (stream == null) { throw new ArgumentNullException("stream"); } this.Logger.WriteFormatMessage("WriteFile:Начало записи файла, folderMetadata.Name: {0}, fileName: {1}", blobFileMetadata.FolderMetadata.Name, blobFileMetadata.Name); //получение контейнера блобов. BlobContainer container = this.GetBlobContainer(blobFileMetadata.FolderMetadata); //запись файла в контейнер. BlobFileInfo blobFileInfo = container.Write(blobFileMetadata, stream, remoteTimeCreated); //установка свойств файла, хранящегося в блобе blobFileMetadata.BlobID = blobFileInfo.BlobID; blobFileMetadata.BlobStartPosition = blobFileInfo.BlobStartPosition; blobFileMetadata.BlobEndPosition = blobFileInfo.BlobEndPosition; this.Logger.WriteMessage("WriteFile:Начало сохранения метаданных файла"); IBlobFileVersionMetadata savedVersion = this.BlobMetadataAdapter.SaveFile(blobFileMetadata, blobFileInfo.TimeCreated); this.Logger.WriteMessage("WriteFile:Окончание сохранения метаданных файла"); this.Logger.WriteFormatMessage("WriteFile:Начало записи файла, folderMetadata.Name: {0}, fileName: {1}, fileUniqueID: {2}, fileVersionUniqueID: {3}", blobFileMetadata.FolderMetadata.Name, blobFileMetadata.Name, savedVersion.FileMetadata.UniqueID, savedVersion.UniqueID); return(savedVersion); }
/// <summary> /// Возвращает содержимое файла. /// </summary> /// <param name="versionMetadata">Метаданные версии файла.</param> /// <returns></returns> internal byte[] Read(IBlobFileVersionMetadata versionMetadata) { if (versionMetadata == null) { throw new ArgumentNullException("versionMetadata"); } if (versionMetadata.BlobStartPosition < 0) { throw new ArgumentNullException("fileVersionMetadata.BlobStartPosition"); } if (versionMetadata.BlobEndPosition < 1) { throw new ArgumentNullException("fileVersionMetadata.BlobEndPosition"); } this.Container.DataAdapter.Logger.WriteFormatMessage("Blob.Read:Начало чтения содержимого из блоба, blobStartPosition: {0}, blobEndPosition: {1}", versionMetadata.BlobStartPosition, versionMetadata.BlobEndPosition); //для операции чтения блоб должен всегда существовать if (!this.File.Exists) { throw new Exception(string.Format("Не удалось найти блоб по пути {0}", this.File.FullName)); } byte[] content = null; using (FileStream fs = this.File.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { BlobStreamAdapter streamAdapter = new BlobStreamAdapter(fs); content = streamAdapter.Read(versionMetadata); } this.Container.DataAdapter.Logger.WriteFormatMessage("Blob.Read:Окончание чтения содержимого из блоба, blobStartPosition: {0}, blobEndPosition: {1}", versionMetadata.BlobStartPosition, versionMetadata.BlobEndPosition); return(content); }