Pfeffer 2019-11-12 02:02 采纳率: 50%
浏览 357
已采纳

Qt 中一段代码看不懂 C++

下面是QT代码中的一部分,有一些小的问题查不到,跪求大佬们回答
不明白的地方都在语句的后面打了问号,名且标号了数字
具体问题在程序后面

目的: 能够起到备份的作用,备份之后的文件是变成压缩包
同时还能加密, 加密的时候还能生成一个文件

// button backup
void Vsbak::on_pushButton_clicked(){ // ?1

    // The QDateTime class provides date and time functions. 
    // 调用QDatetime里面的一个函数,赋给另一个QDatetime的类型
    QDateTime current_date_time = QDateTime::currentDateTime();
    // 初始化三个String类型
    QString targz, cmd_find, cmd_tar;

    //RadioButton presents an option button that can be toggled on (checked) or off (unchecked).
    //Radio buttons are typically used to select one option from a set of options.
    //Use isChecked() to see if a particular button is selected.
    if(ui->radioButton->isChecked()){ // 如果radiobutton 被选择了,那么就进行备份,如果没有就只输出时间
        // Linux find命令用来在指定目录下查找文件。
        // 将目前目录其其下子目录中所有一般文件列出 # find . -type f
        // Linux grep 命令用于查找文件里符合条件的字符串。
        // -v 或 --revert-match : 显示不包含匹配文本的所有行。
        // 反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
        //
        cmd_find = "find ./ -type f | grep -v \'Permission denied\' > TEPLIST";// 这个功能是什么呢// ?2
        targz = current_date_time.toString("yyyy-MM-dd_hh.mm.ss") + ".full.tar.gz";
    }else{
        // 会替换掉前面的百分之1,替换规则是从小到大
        int minDiff = get_min(current_date_time); // 为什么我可以从Current_date_time里面获得一个最小的时间  //?3
        cmd_find = QString("find ./ -mmin -%1 -type f | grep -v \'Permission denied\' > TEPLIST").arg(minDiff);
        targz = current_date_time.toString("yyyy-MM-dd_hh.mm.ss") + ".inc.tar.gz";
    }
    // exclude from 是一个配置目录
    // tar命令
    //-v或--verbose 显示指令执行过程
    // --totals 备份文件建立后,列出文件大小
    //
    cmd_tar = QString("tar --verbose --totals --exclude-vcs %1 --files-from=TEPLIST -czf %2/%3").arg(exclude_from).arg(dir_dest).arg(targz);//?4 尤其是后面的exclude--cs 之后,不知道为什么要这样做

    qDebug()<< cmd_find << endl << cmd_tar<< endl;// 这里的作用是什么呢,这个<<  在C语言中的作用是什么呢 //?5

    QStringList cmd_pipe;// 初始化了一个String目录
    cmd_pipe << "-c" << cmd_find; // 说明这个cmd-pipe已经变成了一个linux的cmd命令了
    cmd->start("/bin/bash",cmd_pipe); // 开始一个程序
    cmd->waitForFinished();
    cmd->close();

    cmd->start(cmd_tar);// cmd_tar 也变成了一个程序
    cmd->waitForFinished();
    cmd->close();

    cmd->start("rm -f TEPLIST");//?6 这里命令的目的是什么呢?
    cmd->waitForFinished();

    /*********** Encrypting************* // ?7 这里的gpg是个什么样的命令
    if(ui->checkBox->isChecked()){
        QString cmd_enc;
        QString cmd_isKey = "gpg -k " + gpg_key;
        cmd->start(cmd_isKey);
        cmd->waitForFinished();

        QString out = QString::fromLocal8Bit(cmd->readAllStandardOutput());
        if(out.isEmpty())
            cmd_enc = QString("gpg -c -o %1/%2.gpg %1/%2").arg(dir_dest).arg(targz);
        else
            cmd_enc = QString("gpg -e -r %1 -o %2/%3.gpg %2/%3").arg(gpg_key).arg(dir_dest).arg(targz);
        cmd->start(cmd_enc);
        cmd->waitForFinished();

    if(false == ui->checkBox_2->isChecked()){
        QString cmd_rm = QString("rm %1/%2.gpg").arg(dir_dest).arg(targz);
        cmd->start(cmd_rm);
        cmd->waitForFinished();
        }

        if(false == ui->checkBox_3->isChecked()){
        QString cmd_rm = QString("rm %1/%2").arg(dir_dest).arg(targz);
        cmd->start(cmd_rm);
        cmd->waitForFinished();
        }


}
  1. 这一部分要实现的功能到底是个啥,之所以不明白也是因为里面的一些代码不清楚
  2. cmd_find = "find ./ -type f | grep -v \'Permission denied\' > TEPLIST";// 这个功能是什么呢,主要是./ 和 后面的 > TEPLIST 看不懂,不知道究竟要干什么
  3. 为什么要用getmin呢? int minDiff = get_min(current_date_time); // 为什么我可以从Current_date_time里面获得一个最小的时间 //?3
  4. cmd_tar = QString("tar --verbose --totals --exclude-vcs %1 --files-from=TEPLIST -czf %2/%3").arg(exclude_from).arg(dir_dest).arg(targz);//?4 尤其是后面的exclude--cs 之后,不知道巍峨什么要这样做
  5. qDebug()<< cmd_find << endl << cmd_tar<< endl;// 这里的作用是什么呢,这个<< 在C语言中的作用是什么呢 //?5
  6. cmd->start("rm -f TEPLIST");//?6 这里命令的目的是什么呢?
  7. ?7 这里的gpg是个什么样的命令
  • 写回答

1条回答 默认 最新

  • threenewbee 2019-11-12 09:18
    关注

    cmd_find = "find ./ -type f | grep -v \'Permission denied\' >
    这里调用的是linux的命令,查找文件然后设置权限
    get_min是一个函数,看它具体怎么实现的,应该是循环遍历了current_date_time,找到最小
    cmd_tar这是压缩tar的linux命令,其中exclude是排除某种文件的开关
    qDebug()<< cmd_find << endl << cmd_tar<< endl;
    向调试器输出命令的执行结果,方便调试排错。
    rm -f 是强制删除
    gpg不是命令,是你的文件的后缀

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)