private static void InvokeProgressReport(ProgressReportEventHandler report, object sender, TFileReport args)
 {
     if (report != null)
     {
         report(sender, args);
     }
 }
Пример #2
0
        private void OnProgessReport(int progressValue)
        {
            ProgressReportEventHandler handler = ProgressReport;

            if (handler != null)
            {
                handler(progressValue);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="source"></param>
        /// <param name="count">Cantidad en bytes</param>
        /// <param name="report"></param>
        public static void CopyFrom(this Stream stream, Stream source, long count, ProgressReportEventHandler report)
        {
            int bufferSize = MB_SIZE;

            byte[] buffer = new byte[bufferSize];
            int    counts = 0, length = ((int)count / bufferSize) + 1;
            int    readers = 1;
            long   llevo   = 0;

            while (llevo < count && readers > 0)
            {
                readers = source.Read(buffer, 0, bufferSize);
                if (llevo + readers <= count)
                {
                    stream.Write(buffer, 0, readers);
                    llevo += readers;
                    counts++;

                    InvokeProgressReport(report, stream, new TFileReport {
                        Copied = counts, Length = length
                    });
                }
                else
                {
                    var aux = new List <byte>();
                    foreach (var item in buffer)
                    {
                        if (llevo + aux.Count > count)
                        {
                            break;
                        }

                        aux.Add(item);
                    }
                    llevo += aux.Count;

                    stream.Write(aux.ToArray(), 0, aux.Count);
                }
            }
        }
        /// <summary>
        /// Decompress stream using defleate algorithm
        /// </summary>
        /// <param name="stream">Stream to decompress</param>
        /// <param name="output">Output stream</param>
        /// <param name="count">Count of bytes to decompress</param>
        /// <param name="offset">Offset on the output stream</param>
        /// <param name="report">Progress report handler</param>
        public static void DeCompressTo(this Stream stream, Stream output, long count, long offset = 0, ProgressReportEventHandler report = null)
        {
            if (output == null)
            {
                throw new ArgumentNullException("output");
            }

            output.Position = offset;

            using (DeflateStream deflateStream = new DeflateStream(stream, CompressionMode.Decompress, true))
            {
                deflateStream.CopyTo(output);
            }

            InvokeProgressReport(report, stream, new TFileReport {
                Copied = count / 4096, Length = count / 4096
            });
        }
        /// <summary>
        /// Compress stream using defleate algorithm
        /// </summary>
        /// <param name="stream">Stream to compress</param>
        /// <param name="output">Output streamm</param>
        /// <param name="count">Count of bytes to compress</param>
        /// <param name="offset">Offset on the output stream</param>
        /// <param name="report">Progress report handler</param>
        public static void CompressTo(this Stream stream, Stream output, long count, long offset = 0, ProgressReportEventHandler report = null)
        {
            if (output == null)
            {
                throw new ArgumentNullException("output");
            }

            output.Position = offset;

            using (DeflateStream deflateStream = new DeflateStream(output, CompressionMode.Compress, true))
            {
                deflateStream.CopyFrom(stream, count, report);
            }
        }
Пример #6
0
 public void AddProgressReportEvent(ProgressReportEventHandler evt)
 {
     _transfer.DiscoveryProgress += evt;
 }