在运行时使用相对路径复制现有文件

Copy an existing file at runtime using a relative path

提问人:LPo 提问时间:11/16/2023 最后编辑:Abderrahmene Rayene MihoubLPo 更新时间:11/17/2023 访问量:56

问:

我有一个将数据保存到二进制文件中的方法。我正在尝试对这种方法进行单元测试。这就是为什么我给自己制作了一个控制器二进制文件,其中包含我应该使用我的方法保存的数据。

我的文件夹树看起来像这样:

C:.
├───include
    └─── header.h
├───source
│   └─── source.cpp
└───tests
    └───Test
        ├───data
        │   └── controller.bin
        └─── unitary_test.cpp

在 unitary_test.cpp 中运行测试时,我想将 controller.bin 复制到我创建的临时文件夹,即我使用受测方法创建文件的文件夹。

问题是我无法使用相对路径复制此文件,因为找不到我的文件。

QTemporaryDir dir;
std::string controllerPath = "controller.bin";
QFile::copy(QString::fromStdString("./data/" + controllerPath), QDir(dir.path()).filePath(QString::fromStdString(controllerPath)));

有没有办法在运行时使用相对路径执行此操作?

C++ qt 复制 相对路径 qfile

评论

0赞 463035818_is_not_an_ai 11/16/2023
“我无法设法使用相对路径复制此文件”这到底是什么意思?会发生什么?
0赞 LPo 11/16/2023
找不到文件,因此未复制
1赞 nick 11/16/2023
将该控制文件放入 qt 资源中,然后从那里复制到临时目录中。 doc.qt.io/qt-6/...
4赞 molbdnilo 11/16/2023
相对路径是相对于进程的当前工作目录的路径。如果希望它相对于可执行文件,首先需要弄清楚可执行文件的位置。

答:

1赞 Sergey Vlasov 11/16/2023 #1

相对路径必须相对于运行时当前目录。您可能从另一个当前目录执行unitary_test,其中相对路径 data/controller.bin 不存在。

“unitary_test.exe”位于哪里?据我所知,Qt Creator将构建结果生成到单独的目录(而不是源目录)

找到unitary_test.exe并将“data”目录复制到其目录中。实际上,它应该在您的构建脚本中完成(例如 CMakeLists.txt)