Arquivos em C
Publicado por Ivan Rocha 21/07/2007
[ Hits: 11.316 ]
Homepage: http://homes.dcc.ufba.br/~ivan062/bahia
Manipulação de Arquivos de acesso sequencial em C, como um cadastro de funcionários, com as funções de cadastro, remoção lógica, listagem e consulta.
/* Ivan Carmo da Rocha Neto
ivan.cr.neto@gmail.com */
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
typedef struct registro{
char nome[20];
int num, flag;
float salario;
}funcionario;
/*FUNCAO PRA A LIMPEZA DO BUFFER DO TECLADO*/
void flush_in()
{
int ch;
while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}
/*FUNCAO CADASTRAR FUNCIONARIO*/
void cadastrar(FILE *arquivo){
funcionario func, aux;
if((arquivo = fopen("arqexemplo.txt", "r+")) == NULL){
printf("Erro na Database do Sistema! \nContate o Administrador!\n");
usleep(500000);
system("clear");
exit(0);
}
printf("\nNome: ");
scanf("%s", func.nome);
flush_in();
printf("Codigo: ");
scanf("%d", &func.num);
printf("Salario: ");
scanf("%f", &func.salario);
fseek(arquivo, 0, SEEK_SET);
while(!feof(arquivo) && (aux.flag != 0)){
fread(&aux, sizeof(funcionario), 1, arquivo);
if((aux.num == func.num) && (aux.flag == 1)){
aux.num = -1;
break;
}
}
if(aux.num == -1){
printf("\nCodigo existente! Cadastre Novamente! \n");
getchar();
}else{
if(aux.flag == 0){
fseek(arquivo, -sizeof(funcionario), SEEK_CUR);
}else{
fseek(arquivo, 0, SEEK_END);
}
func.flag = 1;
fwrite(&func, sizeof(funcionario), 1, arquivo);
}
fclose(arquivo);
}
/*FUNCAO REMOVER FUNCIONARIO*/
void remover(FILE *arquivo){
funcionario func;
int numero, achou;
char op[1];
if((arquivo = fopen("arqexemplo.txt", "r+")) == NULL){
printf("Erro na Database do Sistema! \nContate o Administrador!\n");
usleep(500000);
system("clear");
exit(0);
}
printf("\nNumero: ");
scanf("%d", &numero);
fseek(arquivo, 0, SEEK_SET);
achou = 0;
while((!feof(arquivo)) && (!achou)){
fread(&func, sizeof(funcionario), 1, arquivo);
if((numero == func.num) && (func.flag == 1))
achou = 1;
}
if(achou == 1){
printf("\n|Funcionario|\n\n");
printf("Nome: %s\n", func.nome);
printf("Codigo: %d\n", func.num);
printf("Salario: %.2f\n\n", func.salario);
printf("Remover Funcionario? (S/N): ");
scanf("%s", op);
//flush_in();
if(toupper(op[0]) == 'S'){
func.flag = 0;
fseek(arquivo, -sizeof(funcionario), SEEK_CUR);
fwrite(&func, sizeof(funcionario), 1, arquivo);
}
}
fclose(arquivo);
}
/*FUNCAO CONSULTAR FUNCIONARIO*/
void consultar(FILE *arquivo){
funcionario func;
int numero, achou;
if((arquivo = fopen("arqexemplo.txt", "a+")) == NULL){
printf("Erro na Database do Sistema! \nContate o Administrador!\n");
usleep(500000);
system("clear");
exit(0);
}
printf("\nNumero: ");
scanf("%d", &numero);
//rewind(arquivo);
fseek(arquivo, 0, SEEK_SET);
achou = 0;
while((!feof(arquivo)) && (!achou)){
fread(&func, sizeof(funcionario), 1, arquivo);
if((func.num == numero) && (func.flag == 1)){
printf("\n|Funcionario|\n\n");
printf("Nome: %s\n", func.nome);
printf("Codigo: %d\n", func.num);
printf("Salario: %.2f\n", func.salario);
achou = 1;
getchar();
}
}
if(!achou){
printf("\nFuncionario não encontado! \n");
getchar();
}
getchar();
fclose(arquivo);
}
/*FUNCAO LISTAR FUNCIONARIOS CADASTRADOS*/
void listar(FILE *arquivo){
funcionario func;
long tamanho;
int achou;
if((arquivo = fopen("arqexemplo.txt", "a+")) == NULL){
printf("Erro na Database do Sistema! \nContate o Administrador!\n");
usleep(500000);
system("clear");
exit(0);
}
fseek(arquivo, 0, SEEK_END);
tamanho = ftell(arquivo);
fseek(arquivo, 0, SEEK_SET);
achou = 0;
while(ftell(arquivo) != tamanho){
fread(&func, sizeof(funcionario), 1, arquivo);
if(func.flag == 1){
printf("\n|Funcionario|\n\n");
printf("Nome: %s\n", func.nome);
printf("Codigo: %d\n", func.num);
printf("Salario: %.2f\n\n", func.salario);
achou = 1;
}
}
if(!achou){
printf("\nNao ha funcionarios cadastrados!\n");
}
getchar();
fclose(arquivo);
}
/*FUNCAO PRINCIPAL*/
main(){
char op[1];
FILE *arquivo;
for(;;){
system("clear");
printf("===== PROGRAMA TESTE ARQUIVOS EM C =====\n\n");
printf("Sequencia de Operacoes:\n\n");
printf("a. Cadastra; \n");
printf("b. Remove; \n");
printf("c. Consulta;\n");
printf("d. Listar; \n");
printf("s. SAIR.\n\n");
printf("OPCAO: ");
scanf("%s", op);
flush_in();
switch(toupper(op[0])){
case 'A':{
cadastrar(arquivo);
}break;
case 'B':{
remover(arquivo);
}break;
case 'C':{
consultar(arquivo);
}break;
case 'D':{
listar(arquivo);
}break;
case 'S':{
printf("\nTem certeza? (S/N): ");
scanf("%s", op);
flush_in();
if (toupper(op[0]) == 'S'){
system("clear");
exit(0);
}
}break;
}
//fclose(arquivo);
}
}
Números de caracteres em arquivo
Exemplo de manipulação de arquivos
Leitura de arquivo texto separando as colunas
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?









