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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en tiempo de ejecución al hacer un stream con fwrite
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Error en tiempo de ejecución al hacer un stream con fwrite  (Leído 6,429 veces)
ccjrocks

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Error en tiempo de ejecución al hacer un stream con fwrite
« Respuesta #10 en: 16 Junio 2013, 00:52 am »

No has pensado en hacer algo como esto?:

Código
  1. uint64_t getFileSize(istream& stream)
  2. {
  3. uint64_t cur, ret;
  4. cur = stream.tellg();
  5. stream.seekg(0, ios::end);
  6. ret = stream.tellg();
  7. stream.seekg(cur, ios::beg);
  8.  
  9. return ret;
  10. }
  11.  
  12. ifstream readfile(readpath.c_str(), ios::binary|ios::in);
  13.  
  14. uint64_t fileSize = getFileSize(readfile);
  15. char *buf = new char[fileSize];
  16. readfile.read(buf, fileSize);
  17.  
  18. for(size_t i=0; i<fileSize; i++)
  19. {
  20. /* Haces lo que quieras con buf[i] */
  21. outputfile.put(buf[i]);
  22. }
  23.  
  24. delete[] buf;
  25.  

Lo veo un poco menos confuso no?

Lo que me interesaba era realizarlo char a char, pero este código escribe entero de un plumazo por lo que no me serviría  :-\ Pero muchas gracias!!

Pues es raro que no te funcione mi código porque a mi si me funciona, puede que el error esté en otro sitio.
Mi código completo es este:
Código
  1. #include<iostream>
  2. #include<fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. ofstream outputfile;
  8. outputfile.open("file1",ios::out);
  9. ifstream readfile;
  10. readfile.open("file2",ios::in);
  11.  
  12.  
  13. while(readfile.good()){
  14. char writebuffer=readfile.get();
  15.  
  16. if(readfile.good())outputfile.put(writebuffer);
  17. }
  18. readfile.close();
  19. outputfile.close();
  20. }

Tenías razón sobre lo del read y write, si que desplazan.
Otra manera que me funciona es esta:

Código
  1. #include<iostream>
  2. #include<fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. ofstream outputfile;
  8. outputfile.open("file1",ios::out);
  9. ifstream readfile;
  10. readfile.open("file2",ios::in);
  11.  
  12. char writebuffer;
  13. while(readfile.read(&writebuffer,1)){
  14. if(readfile.good())outputfile.write(&writebuffer,1);
  15. }
  16. readfile.close();
  17. outputfile.close();
  18. }

Al final resultaba que ¡¡LOS DOS CÓDIGOS FUNCIONABAN!! El problema era muy simple: Paraba la ejecución yo manualmente antes del ifstream.close()  :xD En serio, menuda chorrada y era simplemente eso. Muchas gracias a todos!!

Lo que aún no entiendo es por qué necesito cerrar el ifstream, osea, hago escritura en binario, una vez acabe de escribir el fichero se supone que no tiene ninguna cabecera de cierre ni nada por el estilo no? Es decir, al haber escrito todos los caracteres del fichero, aunque no cierre el stream, debería ser el mismo fichero. ¿Sabéis por que es? Porque el problema era ese, pensaba que aunque no cerrara el stream el fichero se había escrito ya completamente

 ;-) Por fín lo arreglé!!


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error en tiempo de ejecución al hacer un stream con fwrite
« Respuesta #11 en: 16 Junio 2013, 00:57 am »

Lo que aún no entiendo es por qué necesito cerrar el ifstream, osea, hago escritura en binario, una vez acabe de escribir el fichero se supone que no tiene ninguna cabecera de cierre ni nada por el estilo no? Es decir, al haber escrito todos los caracteres del fichero, aunque no cierre el stream, debería ser el mismo fichero. ¿Sabéis por que es? Porque el problema era ese, pensaba que aunque no cerrara el stream el fichero se había escrito ya completamente
La cabecera de cierre se pone cuando cierras el archivo.

Sería una perdida de rendimiento poner una cabecera nueva cada vez que escribas.


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Error en tiempo de ejecución al hacer un stream con fwrite
« Respuesta #12 en: 16 Junio 2013, 14:47 pm »

@ccjrocks, mi código también te permite manipular cada byte del archivo, uno a uno, la única diferencia es que primero lee el archivo de entrada entero, después haces lo que quieras con cada byte y los escribes, uno a uno, al fichero de salida.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
ccjrocks

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: Error en tiempo de ejecución al hacer un stream con fwrite
« Respuesta #13 en: 17 Junio 2013, 23:43 pm »

@ccjrocks, mi código también te permite manipular cada byte del archivo, uno a uno, la única diferencia es que primero lee el archivo de entrada entero, después haces lo que quieras con cada byte y los escribes, uno a uno, al fichero de salida.

Saludos.

¿Pero no sería un desperdicio de memoria bastante importante tener que volver a leer todo el archivo almacenado en una variable? ¿No es mejor editar en el mismo momento en el cual es leído? Así nos evitamos volver a recorrer todo el archivo en la memoria, así como almacenarlo.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
error 458 en tiempo de ejecucion
Programación Visual Basic
wACtOr 0 3,157 Último mensaje 18 Junio 2007, 16:20 pm
por wACtOr
Ayuda Error 92 en tiempo de Ejecucion
Programación Visual Basic
mastercss 8 6,373 Último mensaje 23 Abril 2014, 14:46 pm
por abkanis
winsock error 10035 en tiempo de ejecucion
Programación Visual Basic
Dark4ngel 3 3,652 Último mensaje 10 Noviembre 2011, 18:12 pm
por Dark4ngel
Hacer instrucción en tiempo de ejecución.
.NET (C#, VB.NET, ASP)
NetJava 1 2,518 Último mensaje 5 Enero 2012, 12:42 pm
por NetJava
error en tiempo de ejecucion en programa c++
Programación C/C++
tca153 9 6,204 Último mensaje 9 Agosto 2021, 20:59 pm
por tca153
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines