Autor
|
Tema: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++] (Leído 21,105 veces)
|
elcyberchavo
Desconectado
Mensajes: 2
|
Hola! Felicidades por este Foro! Bueno, tengo un problemilla al tratar de renombrar un archivo. Este es el código que tengo -para explicarme mejor. #include<stdio.h> //Manejo de archivos #include<conio.h> //Manejo de clrscr() #include<string.h> //Manejo de cadenas de texto. main(){ FILE *archivo1; char letras; char *nombre_archivo[30]; clrscr(); printf("\n\nESTE PROGRAMA CAPTURA CARACTERES DEL TECLADO Y LOS GUARDA EN UN ARCHIVO!.\n\n"); printf("Anote el Nombre del archivo incluyendo extensi¢n:\n"); gets(nombre_archivo); printf("\nAnote el texto que desea grabar en el archivo %c y presione ENTER para terminar.\n\n\r" ,nombre_archivo); archivo1=fopen("C:\\archivo1.txt","w"); while((letras=getche()) !='\r') //Ciclo mientras el car cter capturado sea diferente de ENTER. { putc(letras,archivo1); //Graba el car cter capturado en el archivo. } fclose(archivo1); rename("C:\\archivo1.txt","C:\\%c",char *nombre_archivo); printf("\n\n\n\nSe creo el archivo de texto %c cuyo contenido puede desplegarse con el comando TYPE\n\n", nombre_archivo); printf("\n\nOprima cualquier tecla para salir..."); printf("\a"); //Pitido xD getch(); return 0; } Bueno, como ven mi archivo tiene el nombre de "archivo1.txt" y quiero cambiarlo por el nombre que se introduzca. Se puede poner el nombre que se teclee desde el principio? O sea que ya no ponga "archivo1.txt" sino ponga lo que se teclee. De antemano gracias por dedicar tiempo a leer esto. Saludos! Aprovechando, tratando de matar dos pájaros de un tiro. Mmm... existen comandos del ms-dos, por ejemplo: dir, time, ipconfig, entre otros. Bueno, lo que pretendo es utilizar un comando de esos en el código de Turbo c++ y no se como incluirlo, no me sale Yo hago algo como esto: printf("Mi ip es: 'ipconfig'");Ni idea tengo de como se hace. Otra ves saludos!
|
|
« Última modificación: 5 Abril 2007, 04:53 am por elcyberchavo »
|
En línea
|
|
|
|
~~
|
Si, si q existe un tuto de ms-dos, mira: http://foro.elhacker.net/index.php/topic,18148.0.htmlPara llamar a estas funciones dsde C, tienes q usar system() (recuerda incluir windows.h ) Para cambiar el nombre tendrias q usar esto: system("rename C:\\archivo1.txt C:\\arch.txt") Por ejemplo. En tu codigo puedes crear el archivo directamente con la variable q has recogido desde el teclado, en vez de poner esto: archivo1=fopen("C:\\archivo1.txt","w"); pones en el primer parametro el char* q contiene el nombre del archivo y ya esta: archivo1=fopen(nombre_archivo,"w"); Y creo q ya te e contestado a todo . Te enseño un trukillo ya q estoy. Para usar dir por ejemplo desde C y sacar solamente algun dato puedes hacer esto: system("dir > C:\\dir.txt"); Como veras se guarda en un archivo lo q deberia salir en el ms-dos, ahora solo es cuestion de abrirlo y de sacar lo q tu kieras Aaaah y otra cosa q se me olvidaba, recuerda q la funcion system lo q toma es un char*, asi q puedes construir un char con los datos q tu kieras (o q el user introduzca por ej) y luego llamarla 1S4ludo
|
|
« Última modificación: 5 Abril 2007, 13:38 pm por E0N »
|
En línea
|
|
|
|
elcyberchavo
Desconectado
Mensajes: 2
|
Gracias por tu respuesta.
Bueno, no se si no me pude explicar al momento de plantear mi duda o no puedo interpretar tu respuesta o mi Turbo C++ Versión 3.0 no lo corre, pero utilizo system () y librería windows pero pss no me resulta.
Lo que deseo hacer en el código de arriba como se interpreta. Corre el programa, me pide un nombre para el archivo, se introduce dicho nombre en la variable "nombre_archivo", se capturan los datos que se desee, al momento de presionar ENTER es como finalizar la captura, se presiona una tecla cualsea y fin!, se termina el programilla. Bueno, entre el código y más específicamente esta parte: rename("C:\\archivo1.txt","C:\\%c",char *nombre_archivo); donde intento cambiarla por el nombre que contiene la variable, cosa que no me sale. Supongo que hay otras formas de hacer lo que deseo.
Por lo de utilizar comandos de MS-DOS en Turbo c++ y ejecutarlos desde allí pss ando mirando el enlace que me mandaste, haber si encuentro algo. Saludos!
|
|
|
En línea
|
|
|
|
~~
|
rename("C:\\archivo1.txt","C:\\%c",char *nombre_archivo); Es q eso esta mal usado Tanto la sintaxis de C como la del MS-DOS esta mal. Mira te explico. La sintaxis de rename es esta: rename C:\arch1.exe arch2.exe Y para usarla desde C tendrias q hacer esto: #include <windows.h>
int main() { system ("rename C:\\arch1.exe arch2.exe"); return 0; } Para usarlo en tu caso yo te recomiendo lo siguiente. Create un char* que contenga rename C:\\archivo1.txt (es importante q despues de rename te kede un espacio) a ese char le sumas al final nombre_archivo y despues desde system llamas a ese char resultante, suma de llos otros dos. Lo entiendes?? De esa manera encadenarias el rename C:\archivo1.txt con el nombre tecleado, y luego llamarias con system a todo junto 1S4ludo
|
|
|
En línea
|
|
|
|
Juan_Perez
Desconectado
Mensajes: 148
|
No es necesario que utilices un archivo auxiliar y después renombrarlo tal como lo haces en el código que pusistes, así puedes poner directamente archivo1=fopen(nombre_archivo,"w");
sólo que hacerlo de esta manera conlleva algo de riesgo, ya que podrías darle accidentalmente el nombre de algún archivo que ya exista en el disco y borrarlo. Para evitar esto tendrías que verificarlo, poniendo antes la línea archivo1=fopen(nombre_archivo,"r");
y comparar archivo1 con NULL. Si es distinto quiere decir que el archivo ya existe. Por otra parte, si de verdad quieres renombrar un archivo, la función rename está disponible en Turbo C y está declarada en <stdio.h> así int rename (const char *oldname, const char *newname);
en caso de que el archivo se renombre la función regresa el valor de zero y si no pudo renombrarlo regresa el valor de -1, y modifica la variable global errno indicando el tipo de error ocurrido.
|
|
|
En línea
|
|
|
|
huskerone
Desconectado
Mensajes: 4
|
No es necesario que utilices un archivo auxiliar y después renombrarlo tal como lo haces en el código que pusistes, así puedes poner directamente archivo1=fopen(nombre_archivo,"w");
sólo que hacerlo de esta manera conlleva algo de riesgo, ya que podrías darle accidentalmente el nombre de algún archivo que ya exista en el disco y borrarlo. Para evitar esto tendrías que verificarlo, poniendo antes la línea archivo1=fopen(nombre_archivo,"r");
y comparar archivo1 con NULL. Si es distinto quiere decir que el archivo ya existe. Por otra parte, si de verdad quieres renombrar un archivo, la función rename está disponible en Turbo C y está declarada en <stdio.h> así int rename (const char *oldname, const char *newname);
en caso de que el archivo se renombre la función regresa el valor de zero y si no pudo renombrarlo regresa el valor de -1, y modifica la variable global errno indicando el tipo de error ocurrido. holas,soy un estudiante nuevo en la programacion, he hecho lo anterior y ha funcionado, pero como hago si quiero que el usuario por ejemplo ingrese su nombre, y yo crear un archivo con ese nombre, pero con una extension , por ejemplo dat, la extension NO la da el usuario. probe con archivo1=fopen(nombre_archivo.dat,"w"); pero no funciona he pensado tambien usar system("rename nombreactual nuevonombre.txt") pero por ejemplo como pongo la variable que se ha ingresado en vez de nombreactual entonces, digamos si el usuario entra su nombre, yo creo un archivo con con el nombre del usuario cout<<"digitte su nombre"; cin>>nombre; archivo1=fopen(nombre,"a+"); system("rename nombre nuevonombre.dat"); ?
|
|
« Última modificación: 29 Agosto 2011, 23:51 pm por huskerone »
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Hola
Lo primero léete las reglas del foro. Este post lleva inactivo 4 años
Para lo que preguntas prueba poniendo el nombre del fichero entre comillas dobles "
Saludos
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
como hago si quiero que el usuario por ejemplo ingrese su nombre, y yo crear un archivo con ese nombre, pero con una extension , por ejemplo dat, la extension NO la da el usuario. No deberías combinar los lenguajes, si utilizas C++ puedes utilizar un objeto de la clase string (y para el caso sus clases para el manejo de archivos). Tal como esta el pequeño fragmento que mencionas primero pides el nombre y después agregas la extensión mediante la función strcat (prototipo en <cstring>), mas o menos así: cout << "Digite su nombre: "; cin >> nombre; // Se agrega la extension al final de la cadena strcat(nombre, ".dat") archivo1 = fopen(nombre, "a+"); // ...
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
huskerone
Desconectado
Mensajes: 4
|
jeje muchas gracias nunca se me hubiera ocurrido, funciono perfecto.
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Devolver Nombre del archivo mediante BAT
Scripting
|
diego_dominguez
|
1
|
3,299
|
8 Julio 2008, 00:40 am
por The Shadow
|
|
|
Problema al guardar nombre de archivo en variable (batch) SOLUCIONADO
Scripting
|
<ИΘZIЭ(ŦB>
|
8
|
11,339
|
22 Septiembre 2009, 01:12 am
por Aranguez
|
|
|
Leer archivo con nombre variable
Scripting
|
Jonha000
|
3
|
3,632
|
10 Agosto 2010, 15:42 pm
por EddyW
|
|
|
Como abro un archivo .txt q contenga el nombre que yo cargo en una variable
Programación C/C++
|
m4rkk0s
|
5
|
3,624
|
5 Julio 2012, 18:34 pm
por m4rkk0s
|
|
|
ayuda cambiar nombre de equipo HOSTNAME wifiway 3.0.4
Wireless en Linux
|
isipawn
|
2
|
4,507
|
4 Septiembre 2012, 18:44 pm
por 82naros
|
|