Получение расширения файла на языке Си - PullRequest
5 голосов
/ 14 июня 2010

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

Ответы [ 4 ]

9 голосов
/ 14 июня 2010

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

#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]
5 голосов
/ 14 июня 2010

Возможно:

#include <string.h>

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

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

2 голосов
/ 14 июня 2010

Существует портативное ЭЛТ-решение: _splitpath .

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

0 голосов
/ 14 июня 2010

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

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