在C中获取文件扩展名

yhived7q  于 2023-01-04  发布在  其他
关注(0)|答案(4)|浏览(221)

在C语言中,如何从文件名中获取文件扩展名(如.tiff)?
谢谢!

dwthyt8l

dwthyt8l1#

const char *get_filename_ext(const char *filename) {
    const char *dot = strrchr(filename, '.');
    if(!dot || dot == filename) return "";
    return dot + 1;
}

printf("%s\n", get_filename_ext("test.tiff"));
printf("%s\n", get_filename_ext("test.blah.tiff"));
printf("%s\n", get_filename_ext("test."));
printf("%s\n", get_filename_ext("test"));
printf("%s\n", get_filename_ext("..."));
rggaifut

rggaifut2#

strrchr找到最后一个点,然后前进1个字符

#include <stdio.h> /* printf */
#include <string.h> /* strrchr */

ext = strrchr(filename, '.');
if (!ext) {
    /* no extension */
} else {
    printf("extension is %s\n", ext + 1);
}
j5fpnvbx

j5fpnvbx3#

你可以使用strrchr函数来查找字符串中最后一个出现的字符,从而找到最后一个点,然后你可以读取字符串的其余部分作为扩展名。

bzzcjhmw

bzzcjhmw4#

下面是一个同样适用于文件(或目录)* 路径 * 的版本:

#include <assert.h>
#include <string.h>

const char *FileSuffix(const char path[])
{
    const char *result;
    int i, n;

    assert(path != NULL);
    n = strlen(path);
    i = n - 1;
    while ((i >= 0) && (path[i] != '.') && (path[i] != '/') && (path[i] != '\\')) {
        i--;
    }
    if ((i > 0) && (path[i] == '.') && (path[i - 1] != '/') && (path[i - 1] != '\\')) {
        result = path + i;
    } else {
        result = path + n;
    }
    return result;
}

int main(void)
{
    assert(strcmp(FileSuffix("foo/bar.baz.qux"), ".qux") == 0);
    assert(strcmp(FileSuffix("foo.bar.baz/qux"), "") == 0);
    return 0;
}

相关问题