Mac Os Qt在没有sudo身份验证的剧目中复制文件

时间:2013-06-15 18:46:15

标签: macos qt copy user-identification

我在Mac OS& Qt我希望在/Library/Frameworks中复制文件(带有自制功能),但每次复制失败。问题来自识别,但我不知道如何解决它。

这是我的复制功能,当你复制到家里时(例如)

void copyFolder(QString sourceFolder, QString destFolder)
{
    QDir sourceDir(sourceFolder);
    if(!sourceDir.exists())
        return;
    QDir destDir(destFolder);
    if(!destDir.exists())
    {
        if(destDir.mkdir(destFolder))
        {
            QStringList files = sourceDir.entryList(QDir::Files);
            for(int i = 0; i< files.count(); i++)
            {
                QString srcName = sourceFolder + "/" + files[i];
                QString destName = destFolder + "/" + files[i];
                QFile::copy(srcName, destName);
            }
            files.clear();
            files = sourceDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot);
            for(int i = 0; i< files.count(); i++)
            {
                QString srcName = sourceFolder + "/" + files[i];
                QString destName = destFolder + "/" + files[i];
                copyFolder(srcName, destName);
            }
        }
        else
        {
            qDebug() << "There's a problem while creating : " + destFolder;
        }
    }

}

1 个答案:

答案 0 :(得分:1)

由于您遇到的问题是权限问题,您可以解决此问题,但不能单独使用Qt。

为了安全起见,Apple的解决方案是,当需要应用程序访问具有提升权限的内容(在本例中为Frameworks文件夹)时,需要通过launchd生成第二个帮助应用程序,这是第二个应用程序被授予执行任务的权限。

有一个名为SMJobBless的例子,您可以看到here: -

但是,您会注意到它是用Objective-C编写的。如果这对您来说是新的,请注意它只是C的扩展,所以您应该能够合理地轻松地拾取新零件;足以根据您的需要修改SMJobBless示例。

SMJobBless的文档很少,关于它的更多信息here