gpt4 book ai didi

C++ 将文件从 Qt 传输到外部 USB 驱动器

转载 作者:行者123 更新时间:2023-11-30 01:08:05 25 4
gpt4 key购买 nike

我是 Qt 的新手,我需要帮助将所有文件从本地计算机的特定路径传输到外部 USB 驱动器。

最佳答案

复制单个文件

您可以使用 QFile::copy .

QFile::copy(srcPath, dstPath);

注意:此函数不会覆盖文件,因此您必须删除以前的文件(如果存在):

if (QFile::exist(dstPath)) QFile::remove(dstPath);

如果你需要显示一个用户界面来获取源路径和目标路径,你可以使用QFileDialog的方法来做到这一点。示例:

bool copyFiles() {
const QString srcPath = QFileDialog::getOpenFileName(this, "Source file", "",
"All files (*.*)");
if (srcPath.isNull()) return false; // QFileDialog dialogs return null if user canceled

const QString dstPath = QFileDialog::getSaveFileName(this, "Destination file", "",
"All files (*.*)"); // it asks the user for overwriting existing files
if (dstPath.isNull()) return false;

if (QFile::exist(dstPath))
if (!QFile::remove(dstPath)) return false; // couldn't delete file
// probably write-protected or insufficient privileges

return QFile::copy(srcPath, dstPath);
}

复制目录的全部内容

我将答案扩展到 srcPath 是一个目录的情况。它必须手动和递归地完成。这是执行此操作的代码,为简单起见,没有进行错误检查。您必须负责选择正确的方法(查看 QFileInfo::isFile 了解一些想法。

void recursiveCopy(const QString& srcPath, const QString& dstPath) {
QDir().mkpath(dstPath); // be sure path exists

const QDir srcDir(srcPath);
Q_FOREACH (const auto& dirName, srcDir.entryList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name)) {
recursiveCopy(srcPath + "/" + dirName, dstPath + "/" + dirName);
}

Q_FOREACH (const auto& fileName, srcDir.entryList(QStringList(), QDir::Files, QDir::Name)) {
QFile::copy(srcPath + "/" + fileName, dstPath + "/" + fileName);
}
}

如果需要查询目录,可以使用QFileDialog::getExistingDirectory .

结束语

这两种方法都假定 srcPath 存在。如果您使用了 QFileDialog 方法,它很可能存在(很有可能因为它不是原子操作,目录或文件可能会在对话框和复制操作之间被删除或重命名,但这是一个不同的问题)。

关于C++ 将文件从 Qt 传输到外部 USB 驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com