Excluir um dado de arquivo binário Help pls...

1. Excluir um dado de arquivo binário Help pls...

Marcelo Oliveira
m_oliv3ira

(usa Outra)

Enviado em 20/11/2015 - 00:30h

Galera boa noite!

Galera sou iniciante em linguagem C, estou vendo no momento manipulação de arquivo, estou começando com arquivo binário posteriormente passarei p/ arquivo texto e não faço ideia de como posso excluir um dado de um arquivo binário, meu código esta bem simples, sei que poderia melhorar ele como exemplo usando funções e tal, mas esse não é o foco, alguém poderia me ajudar com o meu terceiro if?
veja:

#include <stdio.h>
#include <stdlib.h>

struct fornecedores{
int codigo;
char nome[30];
char telefone[15];

};

int main() {

struct fornecedores dados;
int opcao;
char apaganome;
FILE *arquivo;
do{

fflush(stdin);
printf("[1] Fornecedores\n");
printf("[2] Listar Fornecedores\n");
printf("[3] Apagar Fornecedor\n");
printf("[4] Sair\n");
scanf("%d",&opcao);

if(opcao == 1){
arquivo = fopen("Fornecedores.dat","a+b");
do{
printf("Codigo do Fornecedor: ");
scanf("%d",&dados.codigo);
printf("Nome do Fornecedor: ");
fflush(stdin);
gets(dados.nome);
fflush(stdin);
printf("Telefone do Fornecedor: ");
fflush(stdin);
gets(dados.telefone);
fflush(stdin);
fwrite(&dados,sizeof(dados),1,arquivo);
printf("\n\nAdicionar Fornecedor [s] [n]\n");
}
while(getch() == 's');
fclose(arquivo);
}


if(opcao == 2){
arquivo = fopen("Fornecedores.dat","r+b");
while(fread(&dados,sizeof(dados),1,arquivo)==1){
printf("\nCodigo: %d\nFornecedor: %s\nTelefone: %s\n",dados.codigo,dados.nome,dados.telefone);
printf("\n====================================\n");
}
system("pause");
fclose(arquivo);
}




if(opcao == 3){
arquivo = fopen ("Fornecedores.dat","r+b");
printf("Digite o nome do Fornecedor para excluir: ");
fflush(stdin);
scanf("%[^\n]s",&apaganome);
fflush(stdin);


fclose(arquivo);
}

if(opcao == 4){
exit(1);
}

}while(opcao != 4);

return 0;
}


Att. Marcelo.


  


2. Re: Excluir um dado de arquivo binário Help pls...

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/11/2015 - 03:32h

Tenta colar parte do seu arquivo binário aqui entre [ quote] e [ /quote ] prá entender como ficou.
Outra coisa, dá prá usar switch() ao invés de um monte de ifs.

----------------------------------------------------------------------------------------------------------------
# apt-get purge ubuntu

http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Excluir um dado de arquivo binário Help pls...

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/11/2015 - 06:20h

Num caso geral, não se pode apagar dados de um arquivo. O que se pode fazer é ter um byte que marque o registro como inativo, para que alguma futura operação de escrita grave por cima de tal registro. Outra possibilidade é você copiar para um arquivo novo os registros que quiser manter, e depois substituir o arquivo velho com essa versão que só preservou o que interessava.

Fora do caso geral, existem as particularidades de cada sistema operacional. No mundo UNIX é possível pedir ao sistema para descartar bytes no final do arquivo através das chamadas truncate() ou ftruncate().


4. Re: Excluir um dado de arquivo binário Help pls...

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/11/2015 - 06:35h

Lembrando do antigo dBase, que primeiro marcava deleção com DELETE e depois apagava prá valer com PACK.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd

http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Excluir um dado de arquivo binário Help pls...

Marcelo Oliveira
m_oliv3ira

(usa Outra)

Enviado em 20/11/2015 - 12:22h


Sim os IFs não são importantes rsrsrs...
Consigo melhorar muito esse codigo...

Mas a logica de copiar os registro para um outro arquivo menos o que desejo excluir é uma ótima ideia, vou tentar aqui depois mostro o resultado.

Muito obrigado a todos, abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts