c++ aria2命令行下载实例

2024-03-25 01:44

本文主要是介绍c++ aria2命令行下载实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采用aria2命令行告诉下载,示例代码如下所示:

1、配置aria2目录,网上下载即可

2、

CString strPath = L"C:\\Users\\14713\\Desktop\\Aria2Sample\\Debug\\aria2";
    SetCurrentDirectory(strPath);
    std::wstring strCmd = L"aria2c  https://dldir1.qq.com/qqfile/qq/TIM3.4.8/TIM3.4.8.22138.exe -x 16 -s 16 -c";

    std::string strResult = runCmd(strCmd);

3、命令行运行方法:

std::string runCmd(std::wstring& strCmd)
{
    //安全属性
    SECURITY_ATTRIBUTES sa;
    HANDLE hRead, hWrite;
    std::string strResult;
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;

    strCmd = L"cmd /c " + strCmd;//加上"cmd /c"是为了能执行类似dir的命令,执行字符串指定的命令然后终断

    //创建匿名管道,导向DOS输入输出通道
    if (!CreatePipe(&hRead, &hWrite, &sa, 0))
    {
        return NULL;
    }
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    ZeroMemory(&pi, sizeof(pi));
    si.cb = sizeof(STARTUPINFO);
    GetStartupInfo(&si);
    si.hStdError = hWrite;//数据输出用的文件句柄
    si.hStdOutput = hWrite;//新创建进程的标准输出连在写管道一端
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

    //执行cmd命令,并在命名中管道中写入cmd命令返回的串
    if (!CreateProcess(NULL, const_cast <wchar_t*>(strCmd.c_str()), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
    {
        return NULL;
    }

    CloseHandle(hWrite);//关闭管道句柄

    char buffer[4096] = { 0 };
    DWORD bytesRead;

    while (ReadFile(hRead, buffer, 4096, &bytesRead, NULL))//从匿名管道中读取数据
    {
        strResult += buffer;

        memset(&buffer, 0, 4096);
        Sleep(200);//防止乱码
    }
    CloseHandle(hRead);
    return strResult;
}

这篇关于c++ aria2命令行下载实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843475

相关文章

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme