} //创建时间; public virtual Stream GetStream(bool isReadOnly = true) { var part = this.GetParent <Partition>(); if (part == null) { Logger.WriteCallerLine($"{nameof(part)} can't be null!"); } //若块组不为空,则取所有的块字段流; if (BlockGroups != null) { if (part != null) { var blockSize = part.ClusterSize; var partStream = part.GetStream(); //若块组不为空,则遍历块组组成虚拟流; var ranges = BlockGroups.Select(p => ValueTuple.Create( p.BlockAddress * blockSize, p.Count * blockSize)).ToArray(); var blockSub = ranges.Sum(p => p.Item2) - Size; if (ranges?.Count() > 0 && 0 < blockSub && blockSub < blockSize) { ranges[ranges.Count() - 1].Item2 -= blockSub; } var multiStream = MulPeriodsStream.CreateFromStream(partStream, ranges); return(multiStream); } } //否则直接取连续的流; else { var blockSize = part.ClusterSize; var partStream = part.GetStream(); if (partStream != null) { var fiStream = InterceptStream.CreateFromStream(partStream, StartLBA, Size); //var buffer = new byte[128]; //var read = fiStream.Read(buffer, 0, buffer.Length); return(fiStream); } } return(null); }