C ++是否与python的功能等效os.path.join?基本上,我正在寻找将文件路径的两个(或多个)部分组合在一起的东西,这样您就不必担心确保两个部分完美地结合在一起。如果在Qt中,那也很酷。
基本上,我花了一个小时来调试一些代码,其中至少有一部分是因为root + filename必须这样做root/ + filename,因此我希望将来避免这种情况。
Answers:
仅作为Boost.Filesystem库的一部分。这是一个例子:
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main ()
{
fs::path dir ("/tmp");
fs::path file ("foo.txt");
fs::path full_path = dir / file;
std::cout << full_path << std::endl;
return 0;
}
这是一个编译和运行的示例(特定于平台):
$ g++ ./test.cpp -o test -lboost_filesystem -lboost_system
$ ./test
/tmp/foo.txt
类似@ user405725的答案(而不是使用boost),并提到@ildjarn的评论,这个功能可作为的一部分的std ::文件系统。以下代码使用Homebrew GCC 9.2.0_1并使用标志进行编译--std=c++17:
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path dir ("/tmp");
fs::path file ("foo.txt");
fs::path full_path = dir / file;
std::cout << full_path << std::endl;
return 0;
}
至少在Unix / Linux中,/即使路径的某些部分已经以结尾/,即root/path等于,连接路径的各个部分始终是安全的root//path。
在这种情况下,您真正需要的就是在上加入东西/。就是说,我同意其他答案,boost::filesystem如果您可以使用它,这是一个不错的选择,因为它支持多个平台。
在Qt,只需使用/代码使用Qt API(时QFile,QFileInfo)。它将在所有平台上做正确的事情。如果您必须传递非Qt函数的路径,或者想格式化它以显示给用户,请使用QDir:toNativeSeparators()例如:
QDir::toNativeSeparators( path );
它将/被等效的本机替代(例如,\在Windows上)。另一个方向是通过QDir::fromNativeSeparators()。
complete)