Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/07/2010, 22:15
Avatar de JoniJnm
JoniJnm
 
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Pregunta Problemas con archivos en c++

Hola,

Necesito hacer una copia manual de un archivo a otro y para ello uso:
Código C++:
Ver original
  1. ifstream original;
  2. ofstream nuevo;
  3. string s; //string auxiliar
Bueno, pues voy cogiendo datos del original y añadiéndolo al nuevo:
Código C++:
Ver original
  1. original.open("original.txt");
  2. original.good(); // da true
  3. nuevo.open("nuevo.txt");
  4. nuevo.good(); // da true
  5.  
  6. while (!original.eof()) {
  7.     getline(original, s);
  8.     // Aquí compruebo cosas del string para saber si tengo que añadirlo o no (el fichero no lo toco)
  9.     // así que no puedo pasar char por char
  10.     if (condicion)
  11.         nuevo<<s;
  12. }
  13. original.fail(); // da true
  14. original.bad(); // da false
  15. nuevo.fail(); // da false
  16.  
  17. original.close();
  18. nuevo.close();
  19.  
  20. original.open("original.txt");
  21. original.good(); // da false así que no puedo leer ni hacer nada
  22.  
  23. // Si volviese a abrir el nuevo:
  24. nuevo.open("nuevo.txt");
  25. nuevo.good(); // da true
Como veis, cuando vuelvo a abrir el original fail() no me devuelve false. Así que falla algo, bad() no falla, es el "failbit". El problema de esto es que cuando cierro los dos ficheros, no puedo volver a abrir el original (al reabrirlo original.good() no devuelve true).

Por lo que he leído, failbit puede fallar porque justo antes del eof se coja el último caracter nulo del objeto, pero entonces qué tengo que hacer? Necesito abrirlo dos veces. No sé si tiene que ver algo que el fichero esté en UTF-8 sin/con bom o ANSI

El contenido del fichero se copia bien, el problema es, como digo, que no puedo abrir, copiar, cerrar y volver a abrir. Es como si el fichero no se cerrara bien.

Alguien sabe qué puede estar pasando? Gracias!
__________________
JoniJnm.es

Última edición por JoniJnm; 04/07/2010 a las 07:01