使用QFTP拷贝文件夹和目录

本文档介绍如何在QT环境下利用QFTP模块进行文件和目录的拷贝。由于QNetworkAccessManager不支持查看远程目录,作者选择了QFTP,尽管它已被废弃但稳定性良好。文中通过代码示例展示了如何利用QFTP的list函数查看目录,以及如何通过信号和槽机制配合QThread解决拷贝目录时遇到的问题。最后,提供了关键代码段供读者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       前一段时间,我上司叫我用QT写一个拷贝目录的小程序,开始我用的是QT中QNetworkAccessManager,实现拷贝文件很简单,但是没有提供查看对面目录的函数,也就是说无法查看对方的文件和目录,根本无法实现拷贝目录,不过我听大神说可以自己写一个查看对面目录的函数,但是我刚刚毕业,能力不够,时间上也不是很都,我只好用QFTP了。

       QFTP现在已经被QT官方抛弃了,但是毕竟是官方库,还是很稳定的,自带list函数,可以查看对方的目录,拷贝文件非常方便。但是拷贝目录却遇到了大问题,我本来想用递归,但是Qt中拷贝文件是信号和槽机制,根本无法用递归。

       然后我上司想到了一个办法,他叫我使用map<QString,bool>来保存目录信息,然后一个一个的遍历,每次遍历个,最终实现了拷贝目录的功能。

      实在不想打字,我说的很简洁,上代码,希望能够给你帮助,这个是用不了的,复制粘贴很多都是不行的,我觉得就是里面的方法可以借鉴一下。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QTreeWidgetItem>
#include <QDir>
#include <QThread>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    addredit=new CIpAddrEdit(ui->centralWidget);
    ui->progressBar->setValue(0);

    //tab->setAutoFillBackground(true);
     this->setAutoFillBackground(true);
    Download_dir=0;
     login_flag=0;
   ftp=NULL;


}

MainWindow::~MainWindow()
{
    delete ui;
}


//下载文件按钮转换的槽
void MainWindow::on_pushButton_clicked()
{

   // qDebug()<< ui->comboBox_file->currentText();


    bool judge=correctJudgment();
    if(judge==false)
    {
     //   qDebug()<<"errer";
        return ;
    }


    QUrlInfo myFileInfo=fileInfo();
    qDebug()<<"myFileinfo.name"<<myFileInfo.name();
    init(true);
     MY_downloading_path=ui->comboBox_catalog->currentText();
    if(!myFileInfo.isDir())
    {
        ui->progressBar->setMaximum(1);
        progressBarValue=0;
        ui->progressBar->setValue(progressBarValue);

        ui->progressBar->setValue(0);
        qDebug()<<"进入下载按钮"<<endl;
        QString filePath;
        QString submitFile;
       // submitFile=ui->lineEdit->text();
        submitFile=ui->comboBox_file->currentText();
        qDebug()<<"submitFile="<<submitFile<<endl;
        //filePath = QFileDialog::getSaveFileName(this,tr("保存文件位置"), "C:\\Users\\Administrator\\Desktop");
        filePath=ui->comboBox_catalog->currentText()+"\\"+submitFile;
         qfile.setFileName(filePath);
            if( !qfile.open(QIODevice::WriteOnly) )
            {
                qDebug() << "Error: cannot write file"
                     << qPrintable(qfile.fileName()) << ":"
                     << qPrintable(qfile.errorString()) ;
                return ;
            }
        ftpFileNamePath=myFileInfo.name();
        mapfile.insert(ftpFileNamePath,false);
        ftp->get(submitFile,&qfile);

    }
    //下载目录
    else
    {
        Download_dir=1;
        ftpFilePath=myFileInfo.name();
        mapDir.insert(ftpFilePath,false);

        QString myDirName=MY_downloading_path+"\\"+ftpFilePath;

        if(!dir.exists(myDirName

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值