Digamos que hay un archivo llamado 12345.jpg. En C, ¿cómo puedo obtener la extensión de archivo para poder compararla con alguna extensión de archivo? Si hay alguna función incorporada, amablemente avíseme.Obteniendo la extensión de archivo en lenguaje C
Respuesta
Probablemente:
#include <string.h>
char *extn = strrchr(filename, '.');
que le dará un puntero al período de la prórroga, o un puntero nulo si no hay ninguna extensión. Es posible que deba hacer un poco más de diligencia debida para asegurarse de que no haya un corte después del punto, entre otras cosas.
'strrchr (filename + 1, '.');' manejaría nombres como '.svn' que comienzan con un punto pero no tienen extensión. – drawnonward
@drawnonward: indudablemente, si considera que se trata de un nombre de archivo sin extensión, en lugar de una extensión sin nombre. Ese es otro de los casos de 'diligencia debida' a considerar. Sin embargo, si el OP está buscando comparar la extensión encontrada con una lista bastante corta de extensiones conocidas, entonces el hecho de que '.svn' no esté en la lista significa que probablemente no importará de todos modos. –
@drawnonward: Leí mal lo que estaba diciendo, usted hace una observación válida. Sin embargo, eso no ayuda con las rutas absolutas que comienzan con '/', o nombres relativos que contienen una barra inclinada ('subdir/.svn'). Hay un caso para decir que necesitas encontrar el inicio del basename del archivo (después de la última barra, pero tienes que preocuparte por las barras diagonales y raíz) y luego buscar un punto que no esté en la primera posición. Supongo que eso significa que el directorio padre '..' tiene el nombre 'punto' seguido de una extensión que comienza con un punto y nada más ... Por lo general, hay otra bola curva con la que lidiar. –
Uso strchr primer miembro de la matriz le dará el nombre de fichero segundo miembro de la matriz le dará extensión
¿Puede profundizar en esto? –
No olvides un nombre de archivo como 'this.uses.many.periods.jpg' –
Una función de hacer eso, junto con un instrumento de prueba:
#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;
}
La ejecución de este con:
./program abc abc. abc.1 .xyz abc.def abc.def.ghi
le da:
[abc] - > []
[abc.] - > [.]
[abc.1] - > [.1]
[.xyz] - > [.xyz]
[abc.def] - > [.def]
[abc.def.ghi] - > [.ghi]
+1 para' strrchr'. El mejor método para encontrar la última instancia de un personaje en una cadena. – tomlogic
Por si acaso alguien lo extraña. 'getExt()' asume que 'fspec' es un nombre base, no una ruta completa. Considere por ejemplo, 'my.dir/file'. Use 'basename()' para obtener el nombre base de una ruta completa. –
Hay una solución CRT portátil: _splitpath.
En Windows también hay una API de shell32 no documentada llamada PathGetExtension, pero eso es malo de muchas maneras que probablemente no debería haber notado eso.
Esta es obviamente una nueva definición de la palabra "portátil" de la que no estaba enterado :-) Con mis disculpas a Douglas Adams por la fama de HHGTTG. – paxdiablo
De hecho, nunca he visto la palabra "portátil" y un enlace a msdn en la misma oración :-) – Job
¡Mi mal, mi mal! No va a editar la respuesta, para que otros la disfruten :) –
- 1. Obteniendo la extensión de archivo en C
- 2. Java obteniendo la extensión de archivo sin subcadena
- 3. Obteniendo el lenguaje OS en java
- 4. C++: obteniendo un tamaño de archivo incorrecto
- 5. Obtener extensión del archivo sin proporcionar extensión en la ruta
- 6. Obteniendo la "diferencia" entre dos matrices en C#?
- 7. Agregar extensión de archivo a archivo de extensión-menos
- 8. ¿Cómo hago para que funcione la extensión de lenguaje OverloadedStrings?
- 9. Comprobar la extensión de archivo en Java
- 10. Cambiando la extensión de archivo en Python
- 11. extensión de archivo MAKE
- 12. Extensión de la aplicación C# .NET: ¿crear un lenguaje de scripting personalizado o no?
- 13. vim: extensión asociada con el lenguaje
- 14. Obteniendo la siguiente línea en un archivo
- 15. ¿Extender el lenguaje C#?
- 16. Iterator en lenguaje C
- 17. Cómo escribir la extensión FireFox con Visual Studio usando el lenguaje de programación C#?
- 18. obteniendo el tamaño de archivo en javascript
- 19. Obteniendo el directorio de inicio en Mac OS X usando el lenguaje C
- 20. cómo identificar la extensión/tipo del archivo usando C#?
- 21. Obteniendo Uploadify Trabajando en C#
- 22. La extensión de Enum en C#
- 23. Obteniendo la ubicación de un archivo .tt en T4
- 24. cómo crear una extensión de archivo personalizada en C#?
- 25. Retire la extensión del archivo en Java
- 26. Excluir una extensión de archivo en System.IO.Directory.GetFiles()
- 27. Obteniendo/configurando el propietario del archivo en C#
- 28. Obteniendo FILEVERSION desde el Archivo de recursos de Visual C++
- 29. Obteniendo la posición del mouse en C#
- 30. Extensión de archivo JSON
[SO 290488] (http://stackoverflow.com/questions/290488) cubre una gran parte del mismo terreno. –
Así es esto - http://stackoverflow.com/questions/51949/how-to-get-file-extension-from-string-in-c –
Posible duplicado de [Obtención de la extensión de archivo en C] (http: // stackoverflow.com/questions/5309471/getting-file-extension-in-c) – nibot