コード例 #1
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            var dlItem = new UMDownload(Update, Path);

            Download(dlItem);
        }
コード例 #2
0
        private void Download(UMDownload dlItem)
        {
            Console.CancelKeyPress += new ConsoleCancelEventHandler(BreakHandler);
            var    dl             = dlItem;
            string finalPath      = dl.DownloadPath + "\\" + dl.FileName;
            int    bytesProcessed = 0;

            pb = new ProgressBar();
            try
            {
                var req = WebRequest.CreateHttp(dl.UpdateUrl);
                res = req.GetResponse() as HttpWebResponse;
            }
            catch (Exception e)
            {
                throw new Exception("Download failed!", e);
            }
            using (resStream = res.GetResponseStream())
            {
                long Length = res.ContentLength;
                using (fileStream = File.OpenWrite(finalPath))
                {
                    byte[] buffer    = new byte[10240];
                    int    bytesRead = resStream.Read(buffer, 0, 10240);
                    try
                    {
                        while (bytesRead > 0)
                        {
                            bytesProcessed += bytesRead;
                            pb.Report((double)bytesProcessed / Length);
                            fileStream.Write(buffer, 0, bytesRead);
                            bytesRead = resStream.Read(buffer, 0, 10240);
                        }
                    }
                    catch
                    {
                        Thread.Sleep(1000);
                        File.Delete(finalPath);
                        throw new UMDownloadCancelledException();
                    }
                }
                resStream.Close();
                resStream.Dispose();
            }
            pb.Dispose();
            Console.WriteLine("Download finished for " + dl.FileName);
        }