使用QFTP拷贝文件夹和目录

       前一段时间,我上司叫我用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 ;
            }
        ftpFi

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: qftp 是一个用于执行文件传输协议(FTP)操作的工具。要删除文件夹及其子项,可以按照以下步骤进行操作: 1. 连接到 FTP 服务器:使用 qftp 连接到目标 FTP 服务器。可以通过输入命令 `qftp [hostname]` 并按下 Enter 键来建立连接。 2. 登录到 FTP 服务器:输入用户名和密码来登录到 FTP 服务器。命令格式为 `USER [username]` 和 `PASS [password]`,在每个命令后按下 Enter 键。如果登录成功,将显示一条成功的消息。 3. 切换到目标文件夹使用 `CWD` 命令切换到要删除的文件夹。命令格式为 `CWD [folder_path]`,其中 [folder_path] 是要删除的文件夹的路径。 4. 删除子项:执行 `DELE` 命令来删除文件夹内的子项。可以使用 `DELE [file_name]` 命令针对每个子项进行删除,其中 [file_name] 是要删除的文件或子文件夹的名称。 5. 删除文件夹:最后,使用 `RMD` 命令来删除空文件夹。命令格式为 `RMD [folder_name]`,其中 [folder_name] 是要删除的文件夹的名称。 6. 断开连接:完成文件夹及其子项的删除后,使用 `QUIT` 命令来断开与 FTP 服务器的连接。输入 `QUIT` 并按下 Enter 键。 上述步骤可帮助您在 qftp 中删除文件夹及其子项。请记得在执行删除操作时要小心,并确保仔细检查要删除的文件夹和文件,以免不可恢复地丢失数据。 ### 回答2: 在qftp中删除文件夹及其子项可以通过以下步骤实现: 1. 首先,使用`qftp::rmdir()`方法来删除文件夹。该方法接受一个参数,即需要删除的文件夹的路径。例如,如果要删除名为"folder"的文件夹,可以使用以下代码: ```cpp QFtp ftp; ftp.rmdir("folder"); ``` 2. 若要删除文件夹及其子项,可以使用`qftp::cd()`方法切换到要删除的文件夹路径,并使用`qftp::list()`方法列出该文件夹中的所有文件和子文件夹。然后,遍历列表,逐个删除文件和子文件夹。以下是实现该功能的示例代码: ```cpp QFtp ftp; ftp.cd("folder"); ftp.list(); connect(&ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(deleteSubItems(QUrlInfo))); ... void MyClass::deleteSubItems(const QUrlInfo &info) { if(info.isDir()) // 如果是文件夹,则递归调用 { QString dirName = info.name(); if(dirName != "." && dirName != "..") { ftp.rmdir(dirName); } } else { ftp.remove(info.name()); } } ``` 在上述代码中,`deleteSubItems(QUrlInfo)`方法是一个槽函数,用于处理`qftp::listInfo()`信号。当`qftp::list()`方法列出文件夹中的每个文件和子文件夹时,此槽函数被调用。`QUrlInfo`对象提供有关文件和文件夹的信息,使用`isDir()`方法来判断是否是文件夹。 以上就是在qftp中删除文件夹及其子项的方法。通过使用`qftp::rmdir()`方法删除文件夹,并结合`qftp::list()`方法和递归调用,可以实现删除文件夹及其子项的功能。 ### 回答3: 在QFTP(Quick File Transfer Protocol)中,要删除文件夹及其子项,需要执行以下步骤: 1. 首先,通过QFTP客户端连接到目标服务器。您需要提供服务器的IP地址、用户名和密码进行身份验证。 2. 使用“cd”命令切换到要删除的文件夹所在的目录。例如,如果要删除名为“folder”的文件夹,可以使用以下命令:cd folder。 3. 确保您在目标文件夹的上一级目录中,即“folder”的父文件夹内。这是因为在QFTP中,您不能直接删除文件夹本身,而是删除其父文件夹中的项。 4. 然后,使用“rmd”命令删除文件夹及其子项。例如,可以使用以下命令删除名为“folder”的文件夹及其子项:rmd folder。 5. 确认操作。QFTP将提示您确认删除操作。输入“yes”或“y”来确认删除。 6. 等待删除完成。QFTP将开始删除文件夹及其子项,并显示删除进度。请耐心等待,直到删除操作完成。 7. 验证删除。使用“ls”命令(列出当前目录下的文件和文件夹)检查目标文件夹是否已被删除。如果成功删除,目标文件夹将不再显示在列表中。 总结起来,要在QFTP中删除文件夹及其子项,您需要连接到服务器,切换到文件夹所在目录,并在其父文件夹使用“rmd”命令来删除。请确保在进行删除操作之前三思,以免不小心删除重要数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值