当前位置: 首页 > article >正文

QT FTP的方式访问其他电脑文件

FTP配置:https://www.jb51.net/article/111054.htm

downLoadFile("ftp://"+ IP +"//db//program.db", "C:/chenhe/db/program.db");

void WeldTool::downLoadFile(QString url, QString strSavePath) {
    QFile* tempFile;
    QTimer timer;
    bool loadFlag = false;
    QNetworkRequest request;
    QNetworkReply* reply = nullptr;
    request.setUrl(QUrl(url));
    QNetworkAccessManager* g_manager = new QNetworkAccessManager();
    reply = g_manager->get(request);

    QEventLoop loop;                                                                // 开启循环等待
    QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);           // 超时则退出循环
    QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);    // 请求成功则退出循环
    QObject::connect(reply, &QNetworkReply::finished, [&]() {
        if (reply->error() != QNetworkReply::NoError) {       
            // 错误处理
            outPutMsg(QtDebugMsg, "WeldTool::downLoadFile Error String  = " + reply->errorString());
            outPutMsg(QtDebugMsg, "WeldTool::downLoadFile url  = " + url);
            return;
        }
        });
    QObject::connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(slotDownLoadSpeed(qint64, qint64))); // 请求成功则退出循环
    QObject::connect(reply, &QNetworkReply::readyRead, [&]() {
        QByteArray bytes = reply->readAll();
        tempFile->write(bytes);
        tempFile->flush();
        loadFlag = true;
        });
    if (!strSavePath.isEmpty() && loadFlag) {
        tempFile = new QFile(strSavePath);
        // [1] 打开下载文件,如果打开文件出错,不进行下载
        if (!tempFile->open(QIODevice::WriteOnly | QIODevice::Truncate)) {
            tempFile->close();
            tempFile->deleteLater();
            outPutMsg(QtDebugMsg, "WeldTool::downLoadFile [错误] 打开文件出错: = " + strSavePath);
            return;
        }
    }
    loop.exec();                                                                    // 启动事件循环
    if(loadFlag){
        tempFile->close();
        tempFile->deleteLater();
    }    
}


http://www.kler.cn/a/405337.html

相关文章:

  • HTML5 SVG
  • 使用最小花费爬楼梯(DP)
  • springboot整合hive
  • 【加入默语老师的私域】C#面试题
  • 【Swift】字符串和字符
  • 华为流程L1-L6业务流程深度细化到可执行
  • 【vue3+vite】新一代vue脚手架工具vite,助力前端开发更快捷更高效
  • 【http】http协议状态码
  • DataWorks快速入门
  • 【1.4 Getting Started--->Support Matrix】
  • aws建立多区域只读库
  • sigmoid和softmax的异同以及对应的loss解析
  • Java解析视频FPS(帧率)、分辨率信息
  • MySQL UPDATE语句执行链路解析
  • 攻克OCR手写识别难点!InkSight教程上线,实现高精度转写;iNatSounds数据集发布,含23万自然物种音频
  • K8S资源限制之LimitRange
  • VUE:基于MVVN的前端js框架
  • 如何使用tesseract的C++接口做字符识别
  • 一文详细了解websocket应用以及连接断开的解决方案
  • 【Kafka 实战】Kafka 如何保证消息的顺序性?
  • C/C++语言基础--C++检测内存泄露方法、RALL思想模型
  • RTPS通信使用的socket和端口
  • 从零开始:如何使用第三方视频美颜SDK开发实时直播美颜平台
  • 在 Swift 中实现字符串分割问题:以字典中的单词构造句子
  • 摸一下elasticsearch8的AI能力:语义搜索/vector向量搜索案例
  • GPU服务器厂家:为什么要选择 GPU 服务器?