Dev - C++ - como llamar a una funcion que hace conexion por fstream a un archivo desde otrafuncion

 
Vista:
sin imagen de perfil

como llamar a una funcion que hace conexion por fstream a un archivo desde otrafuncion

Publicado por Greivin (2 intervenciones) el 04/12/2016 19:15:50
Debo crear un programa que llame a una función "X" que contenga la conexion a un archivo binario por fstream desde otra función, no quiero inserta directamente código de conexión en la función, ya que este conexión se usara en varias funciones mas de manejo de datos y la cual debo usar para abrir vario archivos binarios diferentes, pienso cambiar el nombre el archivo binario por medio de una variable dependiendo del archivo que se deba manejar
Tengo unos archivos binarios:

Cliente.dat
Fiador.dat
Prestamo.dat
Pagos.dat

quiero utilizar la misma funcion "X" para abrir todos esos archivos individualmente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void crearConexion(fstream&conectar)
    {
        ofstream aperturaArchivo("cliente.dat",ios::binary);
    if(!aperturaArchivo)
    {
       fstream aperturaArchivo("cliente.dat", ios::in|ios::out |ios::binary);
       if(!aperturaArchivo)
           {
        cerr<<"No se pudo crear el archivo."<<endl;
           exit(1);
           }
       }
 
    }

funsion que hace la llamada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void registrarNuevoCliente()
{
   crearConexion(fstream &insertarEnArchivo);// no me funciona actualmente la llamada.
   cout<<"Ingrese el numero de cedula (Digite '0' en vez de guiones)\n";
   int numeroID;
   cin>>numeroID;
   insertarEnArchivo.seekg((numeroID-1) * sizeof(datosCliente));
   datosCliente cliente;
   insertarEnArchivo.read(reinterpret_cast< char *>(&cliente),sizeof(datosCliente));
   if(cliente.obtenerNumeroID()==0)
   {
       char apellido[15];
       char primerNombre[10];
       int estado;
 
   cout<<"digite el primer nombre, apellido y estado\n ";
   cin>>setw(10)>>primerNombre;
   cin>>setw(15)>>apellido;
   cin>>estado;
 
   cliente.establecerNumeroID(numeroID);
   cliente.establecerApellido(apellido);
   cliente.establecerNombre(primerNombre);
   cliente.establecerEstado(estado);
 
   insertarEnArchivo.seekp((numeroID-1) * sizeof(datosCliente));
   insertarEnArchivo.write(reinterpret_cast< const char *>(&cliente),sizeof(datosCliente));
   }
   else
   {
    cerr<<"Ya existe un cliente con la cedula "<<numeroID<<endl;
   }
}


donde cliente.dat, la voy a sustituir por una variable
El problema es que no se como llamar a una funcion dentro de otra funcion y que esta conexion pueda ulitizarla con "seekg" para buscar el ID de un cliente y verfificar si existe o no para insertar los datos.


Quisiera si alguien me puede ayudar con esto. se ñp agradeceria mucho

NOTA: "datosClientes" es una clase
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

como llamar a una funcion que hace conexion por fstream a un archivo desde otrafuncion

Publicado por agustin (522 intervenciones) el 04/12/2016 23:53:22
No lo puedo probar porque estoy desde el movil pero podría ser algo asi:
1
2
3
4
5
6
7
8
9
10
11
12
enum {in=(ios::in | ios::binary), out=(ios::out | ios::binary), IO=(ios::in | ios::out | ios::binary)};
 
int crearConexion(fstream *fs, string fileName, std::ios_base::openmode modo)
{
        int retval=0;
        fs->open(fileName,  modo);
        if(!fs)
        {
            retval= -1;
        }
        return retval;
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
int registrarNuevoCliente()
{
    int retval=0;
   ofstream insertarEnArchivo;
   if (crearConexion(&insertarEnArchivo,"clientes.dat", out) == -1){
       cerr<<"No se pudo crear el archivo."<<endl;
           return -1;
    }
   cout<<"Ingrese el numero de cedula (Digite '0' en vez de guiones)\n";
   int numeroID;
   cin>>numeroID;
   insertarEnArchivo.seekg((numeroID-1) * sizeof(datosCliente));
   datosCliente cliente;
   insertarEnArchivo.read(reinterpret_cast< char *>(&cliente),sizeof(datosCliente));
   if(cliente.obtenerNumeroID()==0)
   {
       char apellido[15];
       char primerNombre[10];
       int estado;
 
   cout<<"digite el primer nombre, apellido y estado\n ";
   cin>>setw(10)>>primerNombre;
   cin>>setw(15)>>apellido;
   cin>>estado;
 
   cliente.establecerNumeroID(numeroID);
   cliente.establecerApellido(apellido);
   cliente.establecerNombre(primerNombre);
   cliente.establecerEstado(estado);
 
   insertarEnArchivo.seekp((numeroID-1) * sizeof(datosCliente));
   insertarEnArchivo.write(reinterpret_cast< const char *>(&cliente),sizeof(datosCliente));
   }
   else
   {
    cerr<<"Ya existe un cliente con la cedula "<<numeroID<<endl;
    retval= -2;
   }
    insertarEnArchivo.close();
    return retval;;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

como llamar a una funcion que hace conexion por fstream a un archivo desde otrafuncion

Publicado por Greivin (2 intervenciones) el 05/12/2016 03:31:38
muchas gracias Agustin, voy a implementarlo, agradecido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar