【转】C#中使用aria2c进行下载并显示进度条
【转自】
C#中使用aria2c进行下载并显示进度条 - 云平台知识库 - 博客园
https://www.cnblogs.com/littlehb/p/5782714.html
正则表达式的生成网站:
http://www.txt2re.com/index-csharp.php3
Aria2c下载地址:
https://github.com/aria2/aria2/releases/tag/release-1.34.0
保存的位置:程序运行目录/Download
Program.cs
static void Main(string[] args)
{
var url = "http://dldir1.qq.com/weixin/Windows/WeChatSetup.exe";
if (url != "")
{
var fileName = url.Substring(url.LastIndexOf("/") + );
var r = HttpDownLoad.DownloadFileByAria2(url, string.Format("{0}\\Download\\{1}", Directory.GetCurrentDirectory(), fileName));
Console.WriteLine(r);
Console.ReadLine();
}
}
HttpDownLoad.cs
using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions; namespace ConsoleApplication2
{
public class HttpDownLoad
{
/// <summary>
/// 功能:使用Aria2c进行文件下载
/// 作者:黄海
/// 时间:2018-06-13
/// </summary>
/// <param name="url"></param>
/// <param name="strFileName"></param>
/// <returns></returns>
public static bool DownloadFileByAria2(string url, string strFileName)
{
var tool = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\aria2-1.34.0-win-64bit-build1\\aria2c.exe";
var fi = new FileInfo(strFileName);
var command = " -c -s 10 -x 10 --file-allocation=none --check-certificate=false -d " + fi.DirectoryName + " -o " + fi.Name + " " + url;
using (var p = new Process())
{
RedirectExcuteProcess(p, tool, command, (s, e) => ShowInfo(url,e.Data));
}
return File.Exists(strFileName) && new FileInfo(strFileName).Length>;
}
private static void ShowInfo(string url,string a)
{
if (a == null) return; const string re1 = ".*?"; // Non-greedy match on filler
const string re2 = "(\\(.*\\))"; // Round Braces 1 var r = new Regex(re1 + re2, RegexOptions.IgnoreCase | RegexOptions.Singleline);
var m = r.Match(a);
if (m.Success)
{
var rbraces1 = m.Groups[].ToString().Replace("(", "").Replace(")", "").Replace("%", "").Replace("s","");
if (rbraces1 == "OK")
{
rbraces1 = "";
}
Console.WriteLine(DateTime.Now.ToString().Replace("/","-")+" "+url+" 下载进度:"+rbraces1+"%");
}
} /// <summary>
/// 功能:重定向执行
/// </summary>
/// <param name="p"></param>
/// <param name="exe"></param>
/// <param name="arg"></param>
/// <param name="output"></param>
private static void RedirectExcuteProcess(Process p, string exe, string arg, DataReceivedEventHandler output)
{
p.StartInfo.FileName = exe;
p.StartInfo.Arguments = arg; p.StartInfo.UseShellExecute = false; //输出信息重定向
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true; p.OutputDataReceived += output;
p.ErrorDataReceived += output; p.Start(); //启动线程
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit(); //等待进程结束
}
}
}
【转】C#中使用aria2c进行下载并显示进度条的更多相关文章
- C#中使用aria2c进行下载并显示进度条
正则表达式的生成网站: http://www.txt2re.com/index-csharp.php3 Aria2c下载地址: https://github.com/aria2/aria2/relea ...
- VC下载文件显示进度条
VC下载文件显示进度条 逗比汪星人2009-09-18上传 by Koma http://blog.csd.net/wangningyu http://download.csdn.net/deta ...
- VC下载文件 + 显示进度条
在codeproject里找了许久,发现这样一个VC下载文件并显示进度条的源码,于是添加了些中文注释: 1.下载线程函数: UINT DownloadFile(LPVOID pParam) { CWn ...
- idhttp post 上传或下载时显示进度条
通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...
- idhttp post 上传或下载时显示进度条(对接idhttp1.OnWork事件)
通过 idhttp 带进度条上传演示一下,下载和上传原理差不多,说明一下下面例子中的的idhttp 是动态创建的 第一步:添加一个StatusBar或者gauge 进度条,这2个都可以.我用的是 st ...
- libcurl开源库在Win32程序中使用下载文件显示进度条实例
一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...
- Android 下载文件 显示进度条
加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...
- 在WPF中实现图片一边下载一边显示
原文 在WPF中实现图片一边下载一边显示 当我们上网查看一个较大的图片时,浏览器能一边下载一边显示,这样用户体验是比较好的,但在WPF程序中,当我们通过如下方式显示一幅图片时: img.Source ...
- WPF下载远程文件,并显示进度条和百分比
WPF下载远程文件,并显示进度条和百分比 1.xaml <ProgressBar HorizontalAlignment="Left" Height="10&quo ...
随机推荐
- OrderedDict 有序字典以及读取json串时如何保持原有顺序
1. OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序.比较时,OrderedDict要内容和顺序完全相同才会视为相等 import collectio ...
- C++Primer笔记-----day05
=======================================================================day05======================== ...
- PHP - 脚本退出(包括异常退出),执行指定代码
之前做聊天室的时候有那么个需求就是当用户异常断线的时候就应该清除她的在线状态.因为当时对于flush不够了解,尝试了各种办法,好像都没办法在我们开发机上面执行相应的代码.后来知道是flush的原因.我 ...
- 【 Makefile 编程基础之…
本站文章均为李华明Himi原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/766.html 概述: ...
- Fatal error: Class 'MongoDB\Driver\Manager' not found
折腾了好久,总算找到了问题所在! 首先!!检查你安装的PHP拓展版本是否正确,能在在phpinfo()中看到拓展,若看不到,则安装错误! 其次,我在安装PHP扩展的时候,安装的是mongo拓展,如下图 ...
- My97DatePicker日期控件的使用
本文演示如何在MyEclipse项目中使用My97DatePicker日期控件 1.下载My97DatePicker日期控件, My97DatePicker日期控件下载地址 2.在MyEclipse项 ...
- Blending
[Blending] Blending is used to make transparent objects. When graphics are rendered, after all shade ...
- Ant学习--简单实例入门
步骤1.创建工程文件夹名字 F:\Helloworld 步骤2.编写java代码: package com.netease; public class Ant_test { public static ...
- 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式
通过<高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景>一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率 ...
- th:onclik()传参问题(前端使用了bootstrap)
网上大多帖子是这么写的 onclick调javascript函数时,不能直接使用onclick=“editUser(${prod.id})”,这样会报错,需要修改成如下的格式. <a href= ...