• Viernes 5 de Julio de 2024, 08:08

Autor Tema:  Problema Copiando Ficheros  (Leído 1754 veces)

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Problema Copiando Ficheros
« en: Lunes 13 de Agosto de 2007, 19:32 »
0
Hola, no sé que pasa con un programa que tengo hecho en C++ Builder. Quiero copiar 6 ficheros. Uno de ellos es .jpg y los otros son .php. Pues bien, los meto todos en una cola, y los voy sacando ( los paths para hacer el proceso iterativo. Me ocurre que solo me copia el primero y no sé por qué es. He probado a poner 6 flujos de entrada diferentes, uno para cada fichero de entrada, y otros 6 distintos para los de salida. El código es:

Código: Text
  1.  
  2. char * buffer = new char[4096];
  3. int leidos;
  4. ifstream fi;
  5. ofstream fo;
  6.  
  7. fi.open("fichero.php");
  8. fo.open("copia.php");
  9.  
  10. if ( fi ){
  11.    do{
  12.        fi.read( buffer, 4096 );
  13.        leidos = fi.gcount();
  14.        fo.write( buffer, leidos );
  15.    }while( leidos > 0 );    
  16. }
  17.  
  18. delete []buffer;
  19.  
  20.  

Que esta pasando? Gracias!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #1 en: Martes 14 de Agosto de 2007, 00:12 »
0
¿Ese es el codigo? ¿Seguro? Eso solo abre UN archivo ...

Por cierto, es mejor usar CopyFile ya que trabajas en Windows.

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.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #2 en: Viernes 17 de Agosto de 2007, 07:50 »
0
Hola Eternal,

usé al final CopyFile, mucho más homogéneo para todos los archivos y me va de lujo. No sé por qué fallaban los ifstream / ofstreams...supongo que me está pidiendo el PC un formateo a gritos!

Gracias :lol:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #3 en: Viernes 17 de Agosto de 2007, 08:07 »
0
Cita de: "Ithilien"
Hola Eternal,

usé al final CopyFile, mucho más homogéneo para todos los archivos y me va de lujo. No sé por qué fallaban los ifstream / ofstreams...supongo que me está pidiendo el PC un formateo a gritos!

Gracias :lol:
Lo dudo, seguramente el codigo estaba mal.

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.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #4 en: Viernes 17 de Agosto de 2007, 08:11 »
0
Pues raro es, porque era exactamente el mismo código para todos los archivos. Metí los paths en dos pilas ( una para los ficheros de entrada y otra para los ficheros de salida ) y apliqué un while ( !pila.empty() ){ ... } y luego el código que viste asi que no sé que pasaba. Yo diría que el código no estaba mal. Y lo que hacía el programa es solo copiarme el contenido del ultimo fichero cuyo path metía en último lugar en la pila, esto es, el primero que sacaba de ésta. Para los demás, solo creaba los archivos, pero vacíos.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #5 en: Viernes 17 de Agosto de 2007, 09:03 »
0
Cita de: "Ithilien"
Pues raro es, porque era exactamente el mismo código para todos los archivos. Metí los paths en dos pilas ( una para los ficheros de entrada y otra para los ficheros de salida ) y apliqué un while ( !pila.empty() ){ ... } y luego el código que viste asi que no sé que pasaba. Yo diría que el código no estaba mal. Y lo que hacía el programa es solo copiarme el contenido del ultimo fichero cuyo path metía en último lugar en la pila, esto es, el primero que sacaba de ésta. Para los demás, solo creaba los archivos, pero vacíos.
Si el codigo hubiera estado bien hubiera funcionado ...

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.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #6 en: Viernes 17 de Agosto de 2007, 09:10 »
0
Pues te invito a que analices el código siguiente:

Código: Text
  1.  
  2. stack<char *> originales;
  3. stack<char *> copias;
  4. ifstream fi;
  5. ofstream fo;
  6. char *buffer;
  7. int leidos;
  8.  
  9. originales.push("web\\archivo1.php");
  10. copias.push("C:\\www\\archivo1.php");
  11.  
  12. originales.push("web\\archivo2.php");
  13. copias.push("C:\\www\\archivo2.php");
  14.  
  15. originales.push("web\\archivo3.php");
  16. copias.push("C:\\www\\archivo3.php");
  17.  
  18. originales.push("web\\archivo4.php");
  19. copias.push("C:\\www\\archivo4.php");
  20.  
  21. buffer = new char[4096];
  22.  
  23. while ( !originales.empty() ){
  24.    fi.open(originales.top());
  25.    fo.open(copias.top());
  26.  
  27.    do{
  28.          fi.read( buffer, 4096 );
  29.          leidos = fi.gcount();
  30.          fo.write( buffer, leidos );
  31.    }while( leidos > 0 );
  32.  
  33.    origianeles.pop();
  34.    copias.pop();
  35.    fi.close();
  36.    fo.close();
  37. }
  38.  
  39. delete []buffer;
  40.  
  41.  

Si encuentras el error, te agradecería que me indicaras donde está.

Gracias!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #7 en: Viernes 17 de Agosto de 2007, 10:10 »
0
Lo encontre despues de depurar un rato la STL, siendo sincero no es mi fuerte ya que no se usa en modo Kernel en lo absoluto. Es probable que haya maneras mas correctas de hacerlo pero el punto es que despues de la primera lectura se marca un flag de estado con un valor de error y, esto es algo que no me cabe en la cabeza que pase, se arrastra en el stream pese a hacer close y open posteriormente ...

Poniendo un fi.clear(); antes de cerrar o despues de abrir se soluciona el problema.

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.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #8 en: Viernes 17 de Agosto de 2007, 10:14 »
0
Madre mía! Me parece increible...bueno, como nota positiva, todos los días se aprende algo, ¡y vaya qué algo!

Te doy las gracias por molestarte en mirar el código, pero pudiste ver como, el código parece correcto y un error te dejaa  :unsure: ...

De nuevo gracias!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Copiando Ficheros
« Respuesta #9 en: Viernes 17 de Agosto de 2007, 10:16 »
0
Cita de: "Ithilien"
Madre mía! Me parece increible...bueno, como nota positiva, todos los días se aprende algo, ¡y vaya qué algo!

Te doy las gracias por molestarte en mirar el código, pero pudiste ver como, el código parece correcto y un error te dejaa  :unsure: ...

De nuevo gracias!
Es que no es del todo correcto ... en mi caso los archivos no tienen 4096 bytes por ejemplo ... en tu caso probablemente el flag se arrastre despues de unos cuantos read (del primer archivo) pero uno de los mismos al llegar al final del archivo y no tener este 4096 bytes pondra el estado a erroneo.

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.