具有sudo权限的Qt复制文件

时间:2018-10-09 09:28:13

标签: qt file copy sudo qfile

我可以像这样用Qt处理文件的正常复制:

QFile::copy("/path/file", "/path/copy-of-file");

现在如何复制需要Sudo权限的文件。

2 个答案:

答案 0 :(得分:1)

您可以使用QProcess和pkexec以另一个用户的身份执行命令

pkexec允许授权用户以另一个用户的身份执行PROGRAM。如果未指定用户名,则该程序将以管理超级用户root身份执行。

https://www.freedesktop.org/software/polkit/docs/0.105/pkexec.1.html

QProcess *proc = new QProcess(this);
proc->waitForFinished();

QString cmd = "pkexec /bin/cp /path/file /path/copy-of-file";

proc->start(cmd);

if(!proc->waitForStarted()) //default wait time 30 sec
{
    qDebug() << "Cannot execute:" << cmd;
}

proc->waitForFinished();
proc->setProcessChannelMode(QProcess::MergedChannels);

if(proc->exitStatus() == QProcess::NormalExit
        && proc->exitCode() == QProcess::NormalExit){
    qDebug() << "Success";
} else {
    qDebug() << "Cannot copy file" << cmd;
}

答案 1 :(得分:0)

运行shell命令like this

sudo cp /path/file /path/copy-of-file

根据需要设置密码。

$echo <password> | sudo -S <command>