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
)