Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/09/2009, 11:01
DeepWolf
 
Fecha de Ingreso: septiembre-2009
Mensajes: 1
Antigüedad: 15 años, 4 meses
Puntos: 0
Pregunta Duda al escribir y leer archivos

Estoy aprendiendo la forma de escribir archivos y leerlos en el Turbo C++.
Estoy utilizando struct para ello. No tengo inconvenientes cuando se cuantos datos quiero guardar. Pero me llego la curiosidad de como hacerlo sin un array.

No es el codigo completo pero creo que el fragmento serviria para lo que intendo hacer.

Primero declaro
Código:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
struct persona
{
	char dni[9];
	char nom[30];
	float imp;
};
void leerperso();
void cargperso(struct persona*);
void main()
{
	struct persona client[10];
        cargperso(client);

Para escribir uno por uno utilizo esta funcion:
Código:
cargperso (struct persona*p)
{
  int i=0;
while(i<10)
 {
 cout<<"Cliente "<<i;
 cout<<"DNI "; cin>>p[i].dni;
 cout<<"Nombre "; cin>>p[i].nom;
 cout<<"Importe "; cout<<(p[i].imp=0);
 escribirperso(p);
 i++;
 }
}

void escribirperso(struct persona*p)
{
	FILE *stream;
	stream=fopen("C:\\clie.dat","wb+");
	fwrite(p, sizeof (struct persona), 10, stream);
	fclose(stream);
}
Como ven indica que escriba 10 veces como lo indica el corte de control de cargperso. Quiero modificar la variable del struct ("p/client") para que sea simple y no un array, el corte de control de cargperso terminaria al escribir "fin" y sacar ese contador.
No se como modificar el fwrite para que me lo guarda 1x1 no importa cuantos datos ponga.


De esta forma puedo leer los datos del struct (archivo) sin la necesidad de un FOR/conocimientos de cuantos pongo
Código:
void leerperso()
{
	FILE *stream;
	struct persona to;
	stream=fopen("C:\\clie.dat","rb");
	while(fread(&to, sizeof to, 1,stream)==1)
	{
	cout<<"\nDNI "<<to.dni<<" Nombre "<<to.nom<<" Importe "<<to.imp<<endl;
	}
	fclose(stream);
}
Algún recomendacion para un novato???
Desde ya gracias de antemano...