Я сам сегодня наткнулся на этот вопрос, хотя у меня уже был рабочий код, я понял, что в некоторых случаях он не будет работать.
Хотя некоторые люди уже предлагали использовать некоторые внешние библиотеки, я предпочитаю писать свой собственный код в учебных целях.
Некоторые ответы включали метод, который я использовал в первую очередь (в поисках последнего "."), Но я вспомнил, что в linux скрытые файлы / папки начинаются с ".".
Таким образом, если файл скрыт и не имеет расширения, все имя файла будет взято за расширение.
Чтобы избежать этого, я написал этот кусок кода:
bool getFileExtension(const char * dir_separator, const std::string & file, std::string & ext)
{
std::size_t ext_pos = file.rfind(".");
std::size_t dir_pos = file.rfind(dir_separator);
if(ext_pos>dir_pos+1)
{
ext.append(file.begin()+ext_pos,file.end());
return true;
}
return false;
}
Я не проверил это полностью, но думаю, что оно должно работать.