Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        internal byte[] Read(IBlobFileVersionMetadata versionMetadata)
        {
            if (versionMetadata == null)
            {
                throw new ArgumentNullException("versionMetadata");
            }

            //содержимое файла
            return(this.ReadContent(
                       versionMetadata.FileMetadata.UniqueID,
                       versionMetadata.UniqueID,
                       versionMetadata.BlobStartPosition,
                       versionMetadata.BlobEndPosition));
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        /// <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);
        }