Exemple #1
0
 /// <summary>
 /// Add a chunk to the queue
 /// </summary>
 /// <param name="chunkReadInfo">Chunk information for reading data from file</param>
 public void EnqueueChunk(ChunkReadInfo chunkReadInfo)
 {
     lock (_lockQueueObj)
     {
         _chunks.Enqueue(chunkReadInfo);
         Monitor.PulseAll(_lockQueueObj);
     }
 }
        /// <summary>
        /// Get chunk content from file
        /// </summary>
        /// <param name="chunkReadInfo">Info about chunk</param>
        /// <returns>Chunk content</returns>
        public byte[] GetChunkBytes(ChunkReadInfo chunkReadInfo)
        {
            try
            {
                using (BinaryReader reader = new BinaryReader(File.Open(_fileName, FileMode.Open, FileAccess.Read, FileShare.Read)))
                {
                    reader.BaseStream.Seek(chunkReadInfo.Offset, SeekOrigin.Begin);

                    return(reader.ReadBytes(chunkReadInfo.BytesCount));
                }
            }
            catch (Exception ex)
            {
                throw new ReaderException($"An error occurred while trying to read a data block from a file {_fileName}", ex);
            }
        }