Как получить расширение файла из строки в C ++ - PullRequest
73 голосов
/ 09 сентября 2008

Учитывая строку "filename.conf", как проверить часть расширения?

Мне нужно кроссплатформенное решение.

Ответы [ 24 ]

1 голос
/ 11 мая 2012

Попробуйте использовать strstr

char* lastSlash;
lastSlash = strstr(filename, ".");
0 голосов
/ 20 января 2016

Я использовал функцию PathFindExtension (), чтобы узнать, является ли это правильный файл TIF или нет.

#include <Shlwapi.h>
bool A2iAWrapperUtility::isValidImageFile(string imageFile)
{
    char * pStrExtension = ::PathFindExtension(imageFile.c_str());

    if (pStrExtension != NULL && strcmp(pStrExtension, ".tif") == 0)
    {
        return true;
    }

    return false;
}
0 голосов
/ 17 декабря 2015

Если вы рассматриваете расширение как последнюю точку и возможные символы после нее, но только если они не содержат символ разделителя каталога, следующая функция возвращает начальный индекс расширения или -1, если расширение не найдено. Когда у вас есть это, вы можете делать все, что захотите, например, убрать расширение, изменить его, проверить его и т. Д.

long get_extension_index(string path, char dir_separator = '/') {
    // Look from the end for the first '.',
    // but give up if finding a dir separator char first
    for(long i = path.length() - 1; i >= 0; --i) {
        if(path[i] == '.') {
            return i;
        }
        if(path[i] == dir_separator) {
            return -1;
        }
    }
    return -1;
}
0 голосов
/ 16 ноября 2015

Если вы используете библиотеки Poco , вы можете сделать:

#include <Poco/Path.h>

...

std::string fileExt = Poco::Path("/home/user/myFile.abc").getExtension(); // == "abc"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...