ReadCluster() private method

private ReadCluster ( int index ) : byte[]
index int
return byte[]
コード例 #1
0
        /// <summary>Read data from the partition.</summary>
        /// <param name="buffer"></param>
        /// <param name="offset"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public override int Read(byte[] buffer, int offset, int count)
        {
            int read = 0;

            while (count > 0)
            {
                int positionCluster = checked ((int)(PositionField / NintendoOpticalDiscPartition.ClusterDataSize));

                if (ClusterIndex != positionCluster)
                {
                    ClusterData  = Partition.ReadCluster(positionCluster);
                    ClusterIndex = positionCluster;
                }

                int clusterOffset = checked ((int)(PositionField - ClusterIndex * (long)NintendoOpticalDiscPartition.ClusterDataSize));                // Offset within the cluster.
                int toRead        = Math.Min(ClusterData.Length - clusterOffset, count);

                ClusterData.CopyTo(clusterOffset, toRead, buffer, offset);
                offset        += toRead;
                read          += toRead;
                PositionField += toRead;
                count         -= toRead;
            }

            return(read);
        }