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