【发布时间】:2011-09-13 06:15:11
【问题描述】:
例如我有字符串"root/data/home/file1.txt" 我想得到"root/data/home" C++ 中是否有一个方便的函数可以让我这样做,或者我应该自己编写代码?
【问题讨论】:
例如我有字符串"root/data/home/file1.txt" 我想得到"root/data/home" C++ 中是否有一个方便的函数可以让我这样做,或者我应该自己编写代码?
【问题讨论】:
这是相当依赖于平台的。例如,Windows 使用'\' 作为路径分隔符(大部分),Unix 使用'/',MacOS(OSX 之前)使用':'。
Windows 特定的 API 是 PathRemoveFileSpec。
【讨论】:
您可以进行基本的字符串操作,即
std::string path = "root/data/home/file1.txt";
// no error checking here
std::string prefix = path.substr(0, path.find_last_of('/'));
或采取第三个选项,例如Boost.Filesystem:
namespace fs = boost::filesystem;
fs::path path = "root/data/home/file1.txt";
fs::path prefix = path.parent_path();
【讨论】:
语言本身当然没有方便的功能。字符串库提供find_last_of,应该做的不错。
【讨论】:
如果您使用的是 POSIX 系统,请尝试 dirname(3)。
【讨论】: