private IEnumerable <int> ReadAllBlockReferences(DataStreamDefinition streamDefinition, Node owningNode)
        {
            IDataStreamStructureBuilder streamStructureBuilder =
                new DataStreamStructureBuilderImmutable(_virtualDisk, streamDefinition, AddressingSystemParameters.Default, _fileSystemNodeStorage, owningNode);

            // Note: никаких настоящих блокировок не использует.
            var fileReferencesStream = new DataStreamToReadableAdapter(new DataStream(streamStructureBuilder, AddressingSystemParameters.Default.BlockSize, new NullFileSystemObjectLockingManager(), Guid.NewGuid()));

            var referencesToBlocks = new byte[fileReferencesStream.Length];

            fileReferencesStream.Read(referencesToBlocks, 0, fileReferencesStream.Length);

            var reader = new BinaryReader(new MemoryStream(referencesToBlocks));

            var blockReferences = new List <int>();

            while (reader.BaseStream.Position != reader.BaseStream.Length)
            {
                int nodeIndex = reader.ReadInt32();

                blockReferences.Add(nodeIndex);
            }

            return(blockReferences.AsReadOnly());
        }
        public FolderNode(string name, Guid id, int diskBlockIndex, int parentFolderBlockReference, DataStreamDefinition fileReferencesStreamDefinition, DataStreamDefinition folderReferencesStreamDefinition, DateTime creationTime, Guid version)
            : base(name, id, diskBlockIndex, version, creationTime)
        {
            MethodArgumentValidator.ThrowIfNull(fileReferencesStreamDefinition, "fileReferencesStream");
            MethodArgumentValidator.ThrowIfNull(folderReferencesStreamDefinition, "folderReferencesStream");
            MethodArgumentValidator.ThrowIfNegative(parentFolderBlockReference, "parentFolderBlockReference");
            MethodArgumentValidator.ThrowIfNegative(diskBlockIndex, "diskBlockIndex");
            MethodArgumentValidator.ThrowIfIsDefault(id, "id");

            _fileReferencesStreamDefinition   = fileReferencesStreamDefinition;
            _folderReferencesStreamDefinition = folderReferencesStreamDefinition;
            _parentFolderBlockReference       = parentFolderBlockReference;
        }
Пример #3
0
        public FileNode(string name, Guid id, int diskBlockIndex, DataStreamDefinition fileContentsStreamDefinition, DateTime lastModificationTimeUtc, DateTime creationTimeUtc, Guid version)
            : base(name, id, diskBlockIndex, version, creationTimeUtc)
        {
            if (fileContentsStreamDefinition == null)
            {
                throw new ArgumentNullException("fileContentsStreamDefinition");
            }
            MethodArgumentValidator.ThrowIfIsDefault <DateTime>(lastModificationTimeUtc, "lastModificationTimeUtc");
            MethodArgumentValidator.ThrowIfDateIsNonUtc(lastModificationTimeUtc, "lastModificationTimeUtc");

            _fileContentsStreamDefinition = fileContentsStreamDefinition;
            _lastModificationTimeUtc      = lastModificationTimeUtc;
        }