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个回答

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不是命令,是你的文件的后缀

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问