¿Cómo se obtiene una extensión de archivo (como .tiff
) de un nombre de archivo en C?
¡Gracias!
manejador de errores
¿Cómo se obtiene una extensión de archivo (como .tiff
) de un nombre de archivo en C?
¡Gracias!
ladrónmaestro
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("..."));
Después dot = strrchr(filename, '.');
, dot != NULL
implica que *dot == '.'
por lo que su prueba debe ser simplemente if(dot)
.
– Chris Lutz
15 de marzo de 2011 a las 9:07
Estoy recibiendo un error: renamer.c:11: warning: incompatible implicit declaration of built-in function ‘strrchr’
– manejador de errores
15 de marzo de 2011 a las 9:08
Para la mayoría de los propósitos prácticos, si el último punto es el primer carácter del nombre base, entonces no debe tratarse como una extensión de archivo. por ejemplo en ~/.forward
“.forward” no es una extensión.
–Steve Jessop
15 de marzo de 2011 a las 10:00
Eso realmente no importa … porque solo lo estoy usando para cambiar el nombre de mis fotos por lotes.
– manejador de errores
16 de marzo de 2011 a las 4:30
Una vez que haya extraído la extensión del archivo, un apéndice útil podría ser el strcmp()
rutina de string.h
. Le permitirá comparar la extensión del archivo con una cadena determinada y realizar una determinada acción, por ejemplo if (strcmp(ext,"tiff") == 0) ...
– mabalenk
11 de septiembre de 2019 a las 8:18
pmg
Encuentra el último punto con strrchr
luego avance 1 carácter
#include <stdio.h> /* printf */
#include <string.h> /* strrchr */
ext = strrchr(filename, '.');
if (!ext) {
/* no extension */
} else {
printf("extension is %s\n", ext + 1);
}
No hay necesidad de copiarlo: devolverá una parte de la cadena que termina con el final de la cadena original, por lo que no es necesario realizar modificaciones.
– ThiefMaster
15 de marzo de 2011 a las 9:11
templatetypedef
Puedes usar el strrchr
función, que busca la última aparición de un carácter en una cadena, para encontrar el punto final. A partir de ahí, puede leer el resto de la cadena como la extensión.
Aquí hay una versión que también funciona para archivos (o directorios) caminos:
#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] != "https://stackoverflow.com/") & (path[i] != '\\')) {
i--;
}
if ((i > 0) && (path[i] == '.') && (path[i - 1] != "https://stackoverflow.com/") && (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;
}
Posible duplicado de Obtener extensión de archivo en lenguaje C
– nibot
04/03/2017 a las 18:15