elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++]  (Leído 18,487 veces)
elcyberchavo

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++]
« en: 5 Abril 2007, 04:26 am »

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

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++
« Respuesta #1 en: 5 Abril 2007, 13:36 pm »

Si, si q existe un tuto de ms-dos, mira:
http://foro.elhacker.net/index.php/topic,18148.0.html

Para llamar a estas funciones dsde C, tienes q usar system() (recuerda incluir windows.h ;))
Para cambiar el nombre tendrias q usar esto:

Código:
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:

Código:
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:

Código:
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  :xD

1S4ludo


« Última modificación: 5 Abril 2007, 13:38 pm por E0N » En línea

elcyberchavo

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++
« Respuesta #2 en: 5 Abril 2007, 21:59 pm »

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

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++
« Respuesta #3 en: 6 Abril 2007, 01:46 am »

Citar
rename("C:\\archivo1.txt","C:\\%c",char *nombre_archivo);

Es q eso esta mal usado  :xD Tanto la sintaxis de C como la del MS-DOS esta mal. Mira te explico. La sintaxis de rename es esta:

Código:
rename C:\arch1.exe arch2.exe

Y para usarla desde C tendrias q hacer esto:

Código:
#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 Desconectado

Mensajes: 148


Ver Perfil
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++
« Respuesta #4 en: 6 Abril 2007, 10:12 am »

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
Código:
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
Código:
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í
Código:
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 Desconectado

Mensajes: 4


Ver Perfil
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++
« Respuesta #5 en: 29 Agosto 2011, 23:09 pm »

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
Código:
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
Código:
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í
Código:
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 Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++]
« Respuesta #6 en: 29 Agosto 2011, 23:52 pm »

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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++
« Respuesta #7 en: 30 Agosto 2011, 04:38 am »

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í:
Código
  1. cout << "Digite su nombre: ";
  2. cin >> nombre;
  3.  
  4. // Se agrega la extension al final de la cadena
  5. strcat(nombre, ".dat")
  6. archivo1 = fopen(nombre, "a+");
  7.  
  8. // ...

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 Desconectado

Mensajes: 4


Ver Perfil
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++]
« Respuesta #8 en: 30 Agosto 2011, 17:02 pm »

jeje muchas gracias nunca se me hubiera ocurrido, funciono perfecto. ;-)
En línea

Fera Core

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Cambiar nombre de un archivo mediante una variable. Ayuda! -> [Ms-dos en C++]
« Respuesta #9 en: 13 Abril 2016, 08:50 am »

Gracias por  informacion... ;-) ;-) ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Devolver Nombre del archivo mediante BAT
Scripting
diego_dominguez 1 2,623 Último mensaje 8 Julio 2008, 00:40 am
por The Shadow
Problema al guardar nombre de archivo en variable (batch) SOLUCIONADO
Scripting
<ИΘZIЭ(ŦB> 8 9,671 Último mensaje 22 Septiembre 2009, 01:12 am
por Aranguez
Leer archivo con nombre variable
Scripting
Jonha000 3 2,625 Último mensaje 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 2,468 Último mensaje 5 Julio 2012, 18:34 pm
por m4rkk0s
ayuda cambiar nombre de equipo HOSTNAME wifiway 3.0.4
Wireless en Linux
isipawn 2 3,239 Último mensaje 4 Septiembre 2012, 18:44 pm
por 82naros
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines