Extraer el nombre de un archivo sin su extensión
Resuelto
Hola, ¿hay una función que extraiga el nombre de un archivo en lenguaje C, por favor?
ejemplo
nombre: operación.txt
nombre sin la extensión: operación
ejemplo
nombre: operación.txt
nombre sin la extensión: operación
15 respuestas
-
Colaboradorhola,
¿quizás tomando todo lo que precede al último punto? -
¿Y cómo se hace eso en C?
-
ColaboradorPor ejemplo, utilizando las funciones de string.h https://fr.wikipedia.org/wiki/String.h
-
-
No sé cuál función elegir, hay realmente muchas y hay muchas que no conozco
¿Puede decirme cuál es, por favor? -
Hola,
¿Por qué querer hacer esto en C si aparentemente, como yo, no entiendes nada?
En batch, es simple:
https://forums.commentcamarche.net/forum/affich-14163549-batch-lister-noms-de-ficheirs-sans-extensio -
Sé qué hacer en bash, excepto que en mi ejercicio me piden hacerlo en C.
-
Si alguien sabe cómo hacerlo, estoy interesado
Por ejemplo, memccpy puede hacer más o menos lo que quiero, excepto que incluirá el . o yo no quiero el punto. -
En realidad, al observar este código:
#include <stdio.h> #include <string.h> #include <stdlib.h> char* msg = "This is the string: not copied"; int main( void ) { char buffer[80]; memset( buffer, '\0', 80 ); memccpy( buffer, msg, ':', 80 ); printf( "%s\n", buffer ); return EXIT_SUCCESS; }
Devuelve this is the string:
No sé en este código es como si se pusiera un ‘\0’ al final de buffer, si no, no veo la utilidad de hacer memset(…). -
La fin de buffer el carácter de fin de cadena ´\0’
-
Ah ok, veo que comprendo mejor
Entonces, por ejemplo, si tengo
char archivo [10]= " operaciones.txt "
archivo_sin_extension=operaciones
Char archivo_sin_extension[10];
Para ello hago memccpy(archivo_sin_extension, archivo, '.' ,10)
puts(archivo_sin_extension)
Normalmente me da operaciones.
¿Cómo hago para no tener en cuenta el .? -
Gracias, he entendido. Gracias por tu ayuda.
De hecho, tengo que hacer un programa; debo reemplazar los .txt por .as. -
En realidad, escribí este código, pero no funciona y no entiendo por qué
#include <stdio.h> #include <string.h> int main(){ char archivo[]="operations.txt"; char dest[50]; char archivo_sin_extension[50]; int i=0; while(archivo[i]!='\0'){ if(archivo[i]=='.'){ memccpy(archivo_sin_extension,archivo,archivo[i-1],strlen(archivo)); puts(archivo_sin_extension); } i++; } }
¿Sabes qué está mal en mi código?
yo -
En realidad, a veces me muestra
operations��U
operations6�wU
operationsX�
.....
Es raro que me muestre cosas así
En realidad quería que memccpy me devolviera operations
o p ....s .
0 1 9 10
si utilizo memccpy como antes, devuelve operations/
Yo quería encontrar con mi programa el índice donde está el punto, es decir, i=9
y al hacer archivo[i-1] me permite detenerme en s
Y haciendo como antes, excepto que reemplazo '.' por archivo[i-1]-
-
-
@yg_beAh, no había visto esta respuesta, ¿antes qué querías decir?
-
-
Normalmente no debería cambiar nada ya que memccpy se detendrá en el carácter que está antes del .
-
¿Y qué tengo que cambiar en mi código para que funcione?
-
He entendido lo que estaba mal, gracias.