반응형
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
반응형
'programing' 카테고리의 다른 글
C 코드를 "멀티 스레드"하는 방법 (0) | 2023.06.06 |
---|---|
워크벤치 ERP의 테이블에서 CHARRACHER SET 및 COLATE SET을 설정하려면 어떻게 해야 합니까? (0) | 2023.06.06 |
ncurses C API에 대한 완전한 참조는 어디에서 찾을 수 있습니까? (0) | 2023.06.06 |
메서드를 구식 또는 더 이상 사용되지 않음으로 표시하는 방법 (0) | 2023.06.06 |
MariaDb가 기존 행에 검사 제약 조건을 적용하지 않음 (0) | 2023.06.06 |