Получение расширения файла на языке C

Скажите, что существует файл под названием 12345.jpg. В C, как я могу получить расширение файла так, чтобы я мог соответствовать некоторому расширению файла? Если существуют какие-либо встроенные функции, любезно сообщите мне.

6
задан Jonathan Leffler 14 June 2010 в 06:09
поделиться

4 ответа

Вероятно:

#include <string.h>

char *extn = strrchr(filename, '.');

Это даст вам указатель на период расширения или нулевой указатель, если расширения нет.Возможно, вам придется проявить дополнительную осмотрительность, чтобы убедиться, что после точки нет косой черты, среди прочего.

5
ответ дан 8 December 2019 в 15:59
поделиться

Используйте strchr Первый член массива даст вам имя файла Второй член массива даст вам расширение

-1
ответ дан 8 December 2019 в 15:59
поделиться

Функция для этого вместе с тестовым набором:

#include <stdio.h>
#include <string.h>

const char *getExt (const char *fspec) {
    char *e = strrchr (fspec, '.');
    if (e == NULL)
        e = ""; // fast method, could also use &(fspec[strlen(fspec)]).
    return e;
}

int main (int argc, char *argv[]) {
    int i;
    for (i = 1; i < argc; i++) {
        printf ("[%s] - > [%s]\n", argv[i], getExt (argv[i]));
    }
    return 0;
}

Выполнение этого с:

./program abc abc. abc.1 .xyz abc.def abc.def.ghi

дает вам:

[abc] - > []
[abc.] - > [.]
[abc.1] - > [.1]
[.xyz] - > [.xyz]
[abc.def] - > [.def]
[abc.def.ghi] - > [.ghi]
9
ответ дан 8 December 2019 в 15:59
поделиться

Есть переносимое решение CRT: _splitpath .

В Windows также есть недокументированный API-интерфейс shell32 под названием PathGetExtension , но это во многих смыслах зло, что мне, вероятно, не следовало этого замечать.

2
ответ дан 8 December 2019 в 15:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: