C ++ получить префикс каталога - PullRequest
8 голосов
/ 12 июня 2011

Например, у меня есть строка "root/data/home/file1.txt" Я хотел бы получить "root/data/home" Есть ли в C ++ удобная функция, которая позволяет мне это делать, или я должен сам ее кодировать?

Ответы [ 4 ]

17 голосов
/ 12 июня 2011

Вы можете выполнять основные манипуляции со строками, т.е.

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();
3 голосов
/ 12 июня 2011

Если вы работаете в системе POSIX, попробуйте dirname (3) .

2 голосов
/ 12 июня 2011

Конечно, в самом языке нет удобной функции.Строковая библиотека обеспечивает find_last_of , что должно быть хорошо.

0 голосов
/ 12 июня 2011

Это скорее зависит от платформы. Например, Windows использует '\' для разделителя пути (в основном), Unix использует '/', а MacOS (до OSX) использует ':'.

API для Windows: PathRemoveFileSpec.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...