• Sábado 14 de Diciembre de 2024, 09:38

Autor Tema:  Ayuda System(copy ) C++  (Leído 8845 veces)

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Ayuda System(copy ) C++
« en: Miércoles 13 de Junio de 2007, 00:35 »
0
Hola a todos.Estoi haciendo un proyecto para la universidad en c++. Es un programa de gestion de ficheros.Y me he quedado atascado con el instalador, tb hecho en c++. Uso la sentencia sytem("copy \"rutaorigen\" \"rutadesino\"")
Si hago esto:
     
 mkdir("C:\\Alsa");    //CREA LA CARPETA Alsa EN C:\

 system("copy \"Viajes.dat\"  \"C:\\Alsa\\Viajes.dat\""); // COPIA VIAJES.DAT EN EL DESTINO

Hasta aqui todo bien.Mi pregunta es como puedo hacer que la ruta de destino se una variable?
osea pasar  

AnsiString o string rutavariable="C: \\Alsa";
system("copy \"viajes.dat   rutavariable ");

Evidentemente rutavariable la saco de un DirectoryListBox no le asigno un valor asi pero lo k me interesa es saber si puedo pasar una variable a system copy y k tipo deberia ser.

Muchas gracias de antemano

LeGatoRojo

  • Miembro HIPER activo
  • ****
  • Mensajes: 552
  • Nacionalidad: mx
    • Ver Perfil
    • LeGatoRojo
Re: Ayuda System(copy ) C++
« Respuesta #1 en: Miércoles 13 de Junio de 2007, 01:33 »
0
pues system utiliza unicamente una cadena como parametro, asi que tendras que concatenar.
Un día desperte y en lugar de dientes tenía colmillos, en lugar de manos, tenía garras; pero lo más impactante fue el color escarlata de mi pelaje.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #2 en: Miércoles 13 de Junio de 2007, 02:42 »
0
concatenar el que? si luego tendre que pasarle una variable no? el tema esta ay
en k variable pasar y como

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #3 en: Miércoles 13 de Junio de 2007, 08:11 »
0
Cita de: "kertxo"
concatenar el que? si luego tendre que pasarle una variable no? el tema esta ay
en k variable pasar y como
Si pones el nombre de una variable dentro de una cadena lo toma tal cual como si fuera texto ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #4 en: Miércoles 13 de Junio de 2007, 11:08 »
0
Cita de: "Eternal Idol"

Si pones el nombre de una variable dentro de una cadena lo toma tal cual como si fuera texto ...
Eso ya se, pero lo que digo es si que concateno dos strings luego tendere k pasar la variable string ala sentencia system y eso es lo k no se

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #5 en: Miércoles 13 de Junio de 2007, 11:18 »
0
Cita de: "kertxo"
Eso ya se, pero lo que digo es si que concateno dos strings luego tendere k pasar la variable string ala sentencia system y eso es lo k no se
Esta bien que lo sepas pero no se nota si haces esto:

AnsiString o string rutavariable="C: \\Alsa";
system("copy \"viajes.dat rutavariable ");

Una forma para que lo veas claro:
Código: Text
  1.  
  2. string sysCmd = "copy";
  3. string rutavariable = "C:\\Alsa";
  4. string archivo = "viajes.dat";
  5. sysCmd += " ";
  6. sysCmd += archivo;
  7. sysCmd += " ";
  8. sysCmd += rutavariable;
  9. //printf("%s\r\n", sysCmd.c_str());
  10. //system(sysCmd.c_str());
  11.  
  12.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #6 en: Miércoles 13 de Junio de 2007, 14:37 »
0
El tema es que pensaba que habria alguna manera de meter una variable tomando el contenido de la variable, veo que lo que hecho ha sido esto:

  AnsiString rutaansi;
  if (RadioButton1->Checked==true)
    rutaansi="C:\\Alumno\\Alsa\\";
  else
    if (DirectoryListBox1->Directory=="C:\\")
        rutaansi="C:\\Alsa\\";
      else
        rutaansi=DirectoryListBox1->Directory+"\\Alsa\\";

  ruta=rutaansi.c_str();
  int x;
  x=mkdir(ruta.c_str());
  string rutatempvia="copy ";
  rutatempvia+="Viajes.dat ";
  rutatempvia+=ruta.c_str();
  rutatempvia+="Viajes.dat ";



  system(rutatempvia.c_str());

pero nose porque no va, si quito el DirectoryListBox y coloco un edit y por ese edit meto la ruta de destino correctamente por ejemplo: "C:\\Nueva carpeta\\Alsa\\ si que  me lo copia pero alguien sabe el motivo de porque al poner el Directory no lo hace??

Pd: los espacios estan puesto aunque casi no se aprecien.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #7 en: Miércoles 13 de Junio de 2007, 14:49 »
0
Depura tu programa, sino sabes usar el depurador usa algun tipo de mensaje (printf, MessageBox, OutputDebugString) para saber que cadena se esta formando cuando no funciona.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #8 en: Miércoles 13 de Junio de 2007, 15:24 »
0
He usado el debbuger y el MessageBox y ambos me dan una cadena correcta, justamente la k deberia ser.La cadena es la misma con el edit que con el DirectoryListBox.
El problema debe de estar en el Directory pk aceindo lo mismo kon un edit si que se copia.

Con el codigo asi una cadena queda por ejemplo de la siguiente manera:

"copy Viajes.dat C:\\Alsa\\Viajes.dat"


Por cierto nose si influira ruta es de tipo AnsiString aunque tambien lo he probado con string y el resultado es el mismo.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #9 en: Miércoles 13 de Junio de 2007, 16:03 »
0
¿Que diferencia hay en
  ruta=Edit1->Text.c_str();
  o
  ruta=DirectoryListBox1->Directory.c_str();

Si ambos devuelven el mismo tipo de dato pero si uso el directory no va y si uso el edit si
??

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #10 en: Miércoles 13 de Junio de 2007, 16:17 »
0
Seguramente la cadena no es EXACTAMENTE igual, tal vez haya barras de mas o menos por ejemplo ... lo mas importante es la cadena final, la que se le pasa a system si son iguales como decis (que es imposible) no tiene importancia de que tipo de control vengan, lo unico que importa es la cadena final. Comproba byte por byte hasta encontrar la diferencia.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #11 en: Miércoles 13 de Junio de 2007, 17:06 »
0
Las cadenas son identicas byte a byte de hecho he puesto una condicion
If (Edit1->Text.c_str()==DirectoryListBox1->Directory.c_str())
  {
     Aqui va el codigo de copiado
  }
else
  MessageDlg ("La ruta no es igual",mtWarning,TMsgDlgButtons() << mbOK,0);

Y no funciona porque uso el DirectoryListBox1 para algo

Osea que es seguro que al usar el DirectoryListBox para lo que sea (bien asignar el direcctorio a algo o hacer alguna comparacion) algo ocurre que impide que se copie el archivo

Me estoi volviendo loco.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #12 en: Miércoles 13 de Junio de 2007, 18:17 »
0
No digo esas dos cadenas sino la cadena final (la que le pasas a system) cuando usas tanto Edit1 como DirectoryListBox1.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #13 en: Miércoles 13 de Junio de 2007, 18:31 »
0
si la que yega a system es identica tb lo he comprobado un monton de veces.
Es que no se me ocurre que puede ser.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #14 en: Miércoles 13 de Junio de 2007, 19:17 »
0
A ver, si fuera identica funcionaria ambas veces, es imposible que siendo la misma no funcione siempre.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #15 en: Miércoles 13 de Junio de 2007, 19:22 »
0
Ah, una cosa que puede provocar esa diferencia es que estes usando viajes.dat sin ruta y ese DirectoryListBox1 cambie el directorio actual  :) Si usas paths completos seguro que te funciona.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #16 en: Miércoles 13 de Junio de 2007, 21:17 »
0
Si los he comparado con un if y el resultado del if es true sera k si son iguales no?
asik por ay no van los tiros, sera otra cosa

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #17 en: Miércoles 13 de Junio de 2007, 23:44 »
0
Ya he probado aponer la ruta completa del origen y tampoco es eso. Eske nose me ocurren mas cosas? nose si usar algun otro componente para acerlo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #18 en: Miércoles 13 de Junio de 2007, 23:48 »
0
Depuralo. Si queres adjunta el ejecutable y tambien podes usar CopyFile en vez de system ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #19 en: Jueves 14 de Junio de 2007, 10:48 »
0
No se usar esa sentencia, Podrias explicarme un poko, que libreria hace falta para esa?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #20 en: Jueves 14 de Junio de 2007, 12:04 »
0
Cita de: "kertxo"
No se usar esa sentencia, Podrias explicarme un poko, que libreria hace falta para esa?
¿Lo depuraste? Es la manera mas facil de ver que pasa.

CopyFile es una funcion de la API de Windows a la cual le pasas tres parametros, el primero es el archivo que ya existe, el segundo el que queres crear y el tercero si queres que falle al existir el archivo que queres que crear.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #21 en: Jueves 14 de Junio de 2007, 12:56 »
0
Si lo he depurado con el debbuger y esk no veo nada mal, incluso he probado con CopyFile pero en el momento que use para lo que sea el  DirectoryList¡Box falla

 if (RadioButton1->Checked==true)
    rutaansi="C:/Alumno/Alsa/";
  else
    if (DirectoryListBox1->Directory=="C:/")
        rutaansi="C:/Alsa/";
      else
        rutaansi=DirectoryListBox1->Directory+"/Alsa/";



  //rutaansi=Edit1->Text.c_str();
  int x;
  x=mkdir(rutaansi.c_str());
  rutaansi+="Viajes.dat";
  const char* rutadestres=rutaansi.c_str();
  CopyFile("Viajes.dat",rutadestres,false);

Si uso el Edit perfecto y si el RadioButton1 tb porque no coje la direccion del Directory. Pero en el momento que uso el Directory falla aun poniendo la misma ruta que para el RadioButton1 no entiendo que puede pasar, las cadenas son iguales en ambos casos.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #22 en: Jueves 14 de Junio de 2007, 13:04 »
0
En el primer parametro a CopyFile no estas poniendo una ruta sino un nombre de archivo, si ese DirectoryListBox1 cambia el directorio actual entonces no funcionara. Comproba el valor de retorno de CopyFile.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #23 en: Jueves 14 de Junio de 2007, 13:15 »
0
Perdon era asi CopyFile("\\Viajes.dat",rutadestres,false);
Ya que el archivo esta en la propia carpeta del programa, no pongo la ruta completa pq se ejecutara desde un cd y depende de donde metas el cd la unidad puede variar
(E:, D:....) no? si no como puedo hacer que coja la ruta desde donde se ejecuta?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #24 en: Jueves 14 de Junio de 2007, 13:29 »
0
Cita de: "kertxo"
Perdon era asi CopyFile("\\Viajes.dat",rutadestres,false);
Ya que el archivo esta en la propia carpeta del programa, no pongo la ruta completa pq se ejecutara desde un cd y depende de donde metas el cd la unidad puede variar
(E:, D:....) no? si no como puedo hacer que coja la ruta desde donde se ejecuta?
Eso sigue dependiendo de la directorio actual que no tiene que ser siempre el directorio donde se ejecuta el programa especialmente si ese control la cambia.

Fijate si poniendo la ruta completa funciona.

Si de esa manera funciona sabes que la diferencia es la que te dije en el primer mensaje de esta (segunda) pagina y podes usar GetModuleFileName para obtener el path completo (incluyendo el nombre del ejecutable).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.