Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/07/2016, 16:02
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Pregunta fwrite C mejor que write en C++?

Hola compañeros jajaj, no os voy a dar descanso
¿Que tal entan?

Bueno... a ver como os explico. tengo una estructura en un archivo en C++ que quiero enviar a un fichero 3 veces(con datos diferentes). Hasta aquí todo ok.
Adjunto el código.
Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct Dados {
  6.     char c;
  7.     char frase[10];
  8.     int n;
  9. } dados;
  10.  
  11. int main () {
  12.     ofstream fin;
  13.     fin.open ( "prova.dat", std::fstream::out | std::fstream::binary );
  14.    
  15.    
  16.     Dados d1 = {'a', "frase1", 64};
  17.     Dados d2 = {'b', "frase2", 65};
  18.     Dados d3 = {'c', "frase3", 66};
  19.     fin.write ( reinterpret_cast<const char*> ( &d1 ), sizeof ( dados ) );
  20.     fin.write ( reinterpret_cast<const char*> ( &d2 ), sizeof ( dados ) );
  21.     fin.write ( reinterpret_cast<const char*> ( &d3 ), sizeof ( dados ) );
  22.    
  23.    
  24.     fin.close();
  25.     return 0;
  26. }

El problema pasa por ejemplo a la hora de alterar esos datos. Mire ese otro ejemplo. ¿Debería alterar el primer registro no? Al menos eso es lo que quiero.
Vea el código que altera en C++.
Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct Dados {
  6.     char c;
  7.     char frase[10];
  8.     int n;
  9. } dados;
  10.  
  11. int main () {
  12.     ofstream fin;
  13.     fin.open ( "prova.dat", std::fstream::out | std::fstream::binary );
  14.    
  15.     Dados d4 = {'x', "mudado", 97};
  16.     fin.write ( (char *)&d4, sizeof ( dados ) );
  17.    
  18.     fin.close();
  19.     return 0;
  20. }

En ese caso lo que pasa es que se borra todo el contenido del fichero y se graba 'x', "mudado", 97. Pero con el "mismo" código en C todo funciona "bien", no sé cual es la causa.

Aquí el "mismo" código en C. Pongo mismo entre "" porque no sé que hago mal.
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. typedef struct Dados {
  4.     char c;
  5.     char frase[10];
  6.     int n;
  7. } dados;
  8.  
  9. int main() {
  10.     FILE *file;
  11.     file = fopen ( "prova.dat", "rb+" );
  12.    
  13.     dados d4 = {'x', "mudado", 97};
  14.     fwrite ( (char *)&d4, 1, sizeof(dados), file );
  15.  
  16.     fclose ( file );
  17.    
  18.     return 0;
  19. }

¿Alguien sabe decir que es lo que pasa porque con uno puedo y con otro no?

Gracias de antemano.