Jump to content

apagar dados de um ficheiro binario !!


bushin

Recommended Posts

Não esta a funcionar ... e nao encontro o problema!!

void limpar_fichas(void)
/* Função que, através da pesquisa sequencial do nome, limpa uma ficha do ficheiro. 
Para isso, vai passando cada uma das fichas para um novo ficheiro, até à altura em
que encontra o nome procurado. Nessa altura, apenas gravará essa ficha no novo ficheiro, se 
o utilizador não confirmar o apagar da ficha. No final, apaga o analise.dat e troca os nomes dos 
ficheiros de forma a que o novo ficheiro fique novamente com o nome de analise.dat. */
{
char opcao2;
int encontrou=0;
char nome_proc[40];
FILE *pf,*fich_aux;

EMPRESA aux;




go2xy(3,27);printf("APAGA FICHA  ");SetColor(WHITE);	//titulo

go2xy(10, 2);

printf(" NOME A PROCURAR: ");gets(nome_proc);
        fflush(stdin);


pf=fopen("analise.dat","rb");

if(!pf) 
{
	printf("Erro na abertura do ficheiro %s ! \n\n","pessoas.dat");
	exit(1);
}

fich_aux=fopen("analise_1.dat","wb");

if(!fich_aux) 
{
	printf("Erro na abertura do ficheiro %s ! \n\n","analise_1.dat");
	exit(1); 
}


while (fread(&aux,sizeof(EMPRESA),1,pf)!=0)
{
	if (strcmp(aux.nome_empresa,nome_proc)==0)
	{
		encontrou=1;
		printf(" Encontrou a ficha procurada !\n\n");
		apresenta_dados(aux);

		printf("\n Tem a certeza que quer apagar esta ficha (S/N) ? ");
		opcao2=getch();
		if ((opcao2=='N')||(opcao2=='n'))
			fwrite(&aux,sizeof(EMPRESA),1,fich_aux);
		else
		{
			printf("\n\n\n => A FICHA FOI APAGADA ! ");
			--numero_est; // O número de registos usado é decrementado de um
		}
	}
	else fwrite(&aux,sizeof(EMPRESA),1,fich_aux);
}

if (!encontrou)
	printf(" Nao encontrou a ficha procurada !\n\n");


printf("\n\n Carregue numa tecla para continuar ... ");
getch();

fclose(pf);
fclose(fich_aux);	
remove("analise.dat"); // Apaga o ficheiro "analise.dat" e …
rename("analise.dat","analise_1.dat"); // troca o nome de "analise_1.dat" por "analise.dat"



printf("\n\n\t\tcarregue numa tecla para continuar ... \n\n");
getch();

system("cls");
menu_1();
}
Link to comment
Share on other sites

Esta é a estrutura e a funçao para apresentar os dados...

typedef struct struct_empresa{
char nome_empresa[40];
int estado;
int nif;
unsigned int processo;
data registo;
float liq_g;
float liq_r;
float liq_i;
float autonomia_f;
float endividamento;
float divida_liq;
float divida_rend;
}EMPRESA;


void apresenta_dados(EMPRESA proc_aux){ 



printf("\t------------------------------------------------------\n");
printf("\t %d =>NIF:%d  Empresa: %s	 Data: %d /%d / %d \n",proc_aux.processo,proc_aux.nif,proc_aux.nome_empresa,proc_aux.registo.dia,proc_aux.registo.mes,proc_aux.registo.ano);
printf("\t------------------------------------------------------\n\n\n");


printf("\t> Racios de Liquidez \n");

printf("\t\t%c Liquidez Geral %.1f\n",254,proc_aux.liq_g);
printf("\t\t%c Liquidez Reduzida: %.1f\n",254,proc_aux.liq_r);
printf("\t\t%c Liquidez Imediata: %.1f\n\n",254,proc_aux.liq_i);


printf("\t> Autonomia Finaceira \n");
printf("\t\tAutonomia Finaceira: %.1f\n\n",proc_aux.autonomia_f);


printf("\t> Estrutura de Endividamento \n");

printf("\t\tEndividamento: %.1f\n",proc_aux.endividamento);
printf("\t\tDivida Liquida: %.1f\n",proc_aux.divida_liq);
printf("\t\tDivida do Rendimento:%.1f\n\n",proc_aux.divida_rend);

}
Link to comment
Share on other sites

o problema do programa é que ele copia a informação do ficheiro analise.dat para o novo ficheiro analise_1.dat menos a ficha que eu queria apagar, mas qdo eu faço uma consulta de uma outra ficha quaisquer nao aparece nada pois a função que utilizo para pesquisar esta a utilizar o ficheiro analise.dat; tioricamente deveria funcionar pois utilizo  rename("analise.dat","analise_1.dat");. :wallbash:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.