Скажите, что существует файл под названием 12345.jpg. В C, как я могу получить расширение файла так, чтобы я мог соответствовать некоторому расширению файла? Если существуют какие-либо встроенные функции, любезно сообщите мне.
Вероятно:
#include <string.h>
char *extn = strrchr(filename, '.');
Это даст вам указатель на период расширения или нулевой указатель, если расширения нет.Возможно, вам придется проявить дополнительную осмотрительность, чтобы убедиться, что после точки нет косой черты, среди прочего.
Используйте strchr Первый член массива даст вам имя файла Второй член массива даст вам расширение
Функция для этого вместе с тестовым набором:
#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]
Есть переносимое решение CRT: _splitpath .
В Windows также есть недокументированный API-интерфейс shell32 под названием PathGetExtension , но это во многих смыслах зло, что мне, вероятно, не следовало этого замечать.