programing

C에서 파일 확장명을 가져오는 중

lastmoon 2023. 6. 6. 10:34
반응형

C에서 파일 확장명을 가져오는 중

파일 확장자를 가져오는 방법(예:.tiff) C에 있는 파일 이름에서?

감사합니다!

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("..."));

다음으로 마지막 점 찾기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);
}

사용할 수 있습니다.strrchr문자열에서 마지막으로 나타나는 문자를 검색하여 최종 점을 찾는 함수입니다.여기서 문자열의 나머지 부분을 확장자로 읽을 수 있습니다.

다음은 파일(또는 디렉터리) 경로에서도 작동하는 버전입니다.

#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) && (i < n - 1) && (path[i] == '.') && (path[i - 1] != '/') && (path[i - 1] != '\\')) {
        result = path + i;
    } else {
        result = path + n;
    }
    return result;
}


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

언급URL : https://stackoverflow.com/questions/5309471/getting-file-extension-in-c

반응형