我有一个程序,它将文件夹路径作为命令行参数。然后我用文件名连接来访问这些文件。
例如,folder_path是“./config/” 然后file_path将是“./config/app.conf”,如下所示
stringstream ss;
ss << folder_path << "app.conf";
file_path = ss.str();
但是如果folder_path不包含结尾斜杠,这将不起作用。这似乎是一个常见的问题,所以我想知道如果它不存在的话,最后是否有添加斜杠的成语。
答案 0 :(得分:11)
如果路径位于名为pathname的std :: string中,我通常会这样做:
if (!pathname.empty() && *pathname.rbegin() != '/')
pathname += '/';
或者,使用basic_string :: back():
if (!pathname.empty() && pathname.back() != '/')
pathname += '/';
如有必要,请添加反斜杠的大小写。
补充:另请注意,* nix将处理路径名中的连续斜杠作为单斜杠。因此,在许多情况下,只需在不检查的情况下添加斜杠就足够了。
答案 1 :(得分:2)
答案 2 :(得分:0)
使用C ++ 14 / C ++ 17 std::filesystem
:
#include <experimental/filesystem> // C++14.
namespace fs = std::experimental::filesystem; // C++14.
//#include <filesystem> // C++17.
//namespace fs = std::filesystem; // C++17.
void addTrailingDelimiter(fs::path& path) {
if (!path.empty() && path.generic_string().back() != '/')
path += '/';
}
注意fs::path::generic_string()
。这样您就不必检查native path delimiters(WinAPI native!= generic,而Posix native = generic)。
您可能省略if (path.generic_string().back() != '/')
,因为Posix和WinAPI不关心几个连续的路径分隔符。