我有一个程序,将文件夹path作为命令行参数。 然后我连接到文件名来访问这些文件。
例如,folder_path是“./config/”,然后file_path将是“./config/app.conf”,如下所示
stringstream ss; ss << folder_path << "app.conf"; file_path = ss.str();
但是,如果folder_path不包含结尾斜杠,这将不起作用。 这似乎是一个普遍的问题,所以我想知道是否有一个成语,如果不存在,最后加上斜线。
使用AsParallel()时无法获取与Windows应用程序关联的文件的文件图标
为什么在Vista / 7中,RequestAdditionalTime()方法不能重新启动?
Windows 10使用桌面应用程序的通知
MMAP中的ENODEV错误
读取二进制文件,Linux缓冲区caching
符号查找错误(linux – c ++)
从Code :: Blocksconfigurationg ++不会影响命令行
按值传递std :: function <bool(int)>
我通常这样做,如果路径是在一个名为路径名的std :: string:
if (!pathname.empty() && *pathname.rbegin() != '/') pathname += '/';
或者,用basic_string :: back():
if (!pathname.empty() && pathname.back() != '/') pathname += '/';
补充:另外请注意,* nix将把路径名称中的连续斜线作为一个斜杠来处理。 所以在许多情况下,只要总是添加一个斜线而不检查就足够了。
如果你有一个额外的斜杠,Linux不会在意,所以/ home / user / hello和/ home / user / hello是相同的位置。 您可以添加斜杠作为故障安全。 或者,您可以通过检查最后一个字符来检查它。
使用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() 。 这样你就不必检查本地路径分隔符 (WinAPI native!= generic,而Posix native = generic)。
因为Posix和WinAPI不关心几个连续的路径分隔符,所以你可能会忽略if (path.generic_string().back() != '/') 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。