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