QT-如何移动文件

QT - How To Move A File

本文关键字:移动 文件 何移动 QT-      更新时间:2023-10-16

我想用另一个文件替换驱动器上的文件。进行研究后,我发现没有"替换"方法。相反,我必须删除原始文件,然后将临时文件移至其位置。当我这样做时,我看不到更新的临时文件正在将其移至其新目录中。

QTemporaryFile tempFile;
if (tempFile.open())
{
    // Create temp file
    QTextStream stream;
    stream.setDevice(&tempFile);
    document.save(stream, 4); // document is a QDomDocument object
    tempFile.close();
    // Replace original file with temp file
    file.remove();
    tempFile.rename("C:\ProgramData\Foo\data.xml"); // I don't see the updated data.xml
}

您的问题似乎来自使用QTemporaryFile

首先,请注意tempFile.close();什么都不做。来自QT代码:

bool QTemporaryFileEngine::close()
{
    // Don't close the file, just seek to the front.
    seek(0);
    setError(QFile::UnspecifiedError, QString());
    return true;
}

第二,当您致电tempFile.rename("C:\ProgramData\Foo\data.xml");时, 它将有效关闭tempFile,但也将更改tempFile.fileName(),这意味着当tempFile对象删除时,它将删除您复制到的文件。如果要防止此功能,您可以致电tempFile.setAutoRemove(false)

您要做的事情的另一个解决方案是使用qsavefile,该QSaveFile处理"为您保存到temp/close/更换"例程。