qt 检查目录中是否存在文件,如果不提示用户输入位置,则将文件复制到程序工作目录

qt check if file exists in a directory, if it doesn't prompt the user for its location, then copy the file to the program working directory

我有一个程序,它的工作目录是 ~/Library/Application Support/MyApp,它在这里查找 config.cfg 和日志文件。该程序需要一个名为 MP512-Map.map 的映射文件。它会在此目录中查找以加载它。

当程序第一次在新机器上 运行 时,文件可能不在这个位置,但在用户桌面上或在可执行文件分发的 .dmg 中。我想要一个文件弹出对话框并获取 .map 文件的位置(如果它尚未存在于工作目录中),然后我希望程序将文件从该位置复制到工作目录,以便下次程序 运行 可以从那里立即加载 .map 文件。

我有以下代码:

 QString path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
    QString desktop = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
    QDir dir(path);
    if (!dir.exists()) {
        dir.mkpath(".");   
    }
    QString MapPath = path+"/MP512-Map.map";
    QFile file(MapPath);
    QFile tempfile;
    if(file.exists()!=true){
        qDebug()<<"MAP FILE NOT FOUND.";
        QString temppath = QFileDialog::getOpenFileName(this,tr("Find Location of MP512-Map file:"),desktop,tr("Map Files (*.map)"));
        tempfile.copy(temppath,path);
        qDebug() << "location" << temppath;
        qDebug() << "destination: " << path;
    }

在此之后会读入地图文件。问题出在副本上。 文件没有成功复制过来。

控制台输出显示正确的目录:

location "/Users/Mitch/Desktop/MP512-Map.map"
destination:  "/Users/Mitch/Library/Application Support/AFE-MP-512"

我是否正确实现了复制功能?

是的,这个函数实现是正确的。但是有几个瞬间

if(!QFile::copy(temppath, file.fileName()))
    qDebug() << file.errorString();
  1. 复制函数(与现有函数相同)是静态的,您不需要临时对象 - tempfile
  2. 检查 copy/read/write 功能是否成功的好习惯