Ir ao conteúdo

dúvida lendo arquivo em binário


Ricardobat

Posts recomendados

Postado

Bom pessoal tenho que gravar os dados no arquivo e sair do programa,

depois tenho que abrir de novo o arquivo e ler os dados só que não consigo.

desculpa o codigo é porque ainda esta bagunçado.

typedef struct estrutura locadora;
struct estrutura{
char titulo[100];
char ator[100];
int ano;
};


void gravarDados(locadora *p,FILE *arq){

fwrite(&p,sizeof(locadora),1,arq);

}
void lerDados(locadora *p,FILE *arq){
rewind(arq); /* volta ao inicio do arquivo */
fread(&p,sizeof(locadora),1,arq);

}
void exibirDados(locadora *p){

printf("Titulo do Filme: %s\n", p->titulo);
printf("Ator do Filme: %s\n", p->ator);
printf("Ano de lancamento: %d\n", p->ano);
getch();

}
void cadastrarFilme(locadora *p, int ind){

printf ("Entre com o Titulo do Filme.");
scanf("%s",p->titulo );
fflush(stdin);
printf ("Entre com o Nome do Autor.");
scanf("%s",p->ator );
printf ("Entre com o ano de Lancamento.");
scanf("%d", &p->ano);

}
int main (void ) {
locadora funcionario;
int opcao;
int id=0;
FILE *arq;
char *nome = "teste";


// Abre o arquivo para leitura e escrita

if (( arq = fopen(nome, "r+b")) == NULL) {
printf("\n\nNao foi possivel abrir o arquivo.\n");
system("pause");
exit(1);
}

do{
system("cls");
printf("\n===========================LOCADORA==========================\n\n\n");
printf("\nSelecione a opcao: \n\n");
printf("1- : Cadastrar Filme.\n");
printf("2- : Locar Filme(exibir dados).\n");
printf("3- : Gravar Dados.\n");
printf("4- : Recuperar Dados(ler dados).\n");
printf("5- : Sair do Sistema.\n");
scanf("%d", &opcao);
switch(opcao){
case 1:
cadastrarFilme(&funcionario,id);
break;
case 2:
exibirDados(&funcionario);
break;
case 3:
gravarDados(&funcionario,arq);
break;
case 4:
lerDados(&funcionario,arq);
break;
case 5:
break;
default:
printf("\nOpcao invalida selecione uma das opções acima.\n");
system("PAUSE");
break;
}
}while(opcao!= 5);

fclose(arq);
getchar(); /* Espera o usuario digitar alguma coisa */
system("pause");
exit(0);

}

Postado

Achei uma maneira de realizar este processo,lembrando que ainda

falta fazer alguns tratamentos de erros, mais se tiverem alguma

sugestão melhor, fiquem a vontade.


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define TAMANHO 5

int cont=0; //variavel para contador

typedef struct estrutura locadora;
struct estrutura{
char titulo[100];
char ator[100];
int ano;
char midia[10];
char status[10];

};
typedef struct{
locadora id[TAMANHO];
int aux;//receber e retorna valor para cont
} indice;


void gravarDados(indice *p,FILE *arq){

if (( arq = fopen("teste", "wb")) == NULL) {
printf("\n\nNao foi possivel abrir o arquivo.\n");
system("pause");
exit(1);
}

fwrite(p,sizeof(indice),1,arq); // grava estrutura no arquivo

printf("Dados Gravados com Sucesso!!!\n");

system("pause");
fclose(arq);
}
void lerDados(indice *p,FILE *arq){

if (( arq = fopen("teste", "rb")) == NULL) {
printf("\n\nNao foi possivel abrir o arquivo.\n");
system("pause");
exit(1);
}

fread(p,sizeof(indice),1,arq); //recupera estrutura do arquivo

cont = p->aux;//recebe o valor de aux que foi recuperado do arquivo

printf("Dados Recuperado com Sucesso!!!\n");
system("pause");
fclose(arq);
}

void exibirDados(indice *p){
int i;

for(i=1;i<=cont;i++){
printf ("ID =[%d]\n\n",i);
printf("Titulo do Filme : %s\n", p->id[i].titulo);
printf("Ator do Filme : %s\n", p->id[i].ator);
printf("Ano de lancamento do Filme: %d\n", p->id[i].ano);
printf("Tipo de Midia do Filme : %s\n", p->id[i].midia);
printf("Filme Locado : %s\n", p->id[i].status);
printf("\n\n");
}
getch();
}
void cadastrarFilme(indice *p){
char opcao;
cont++;


do{

printf ("ID =[%d] ",cont);
printf ("\nEntre com o Titulo do Filme: ");
gets(p->id[cont].titulo);
printf ("Entre com o Nome do Autor: ");
gets(p->id[cont].ator);
printf ("Entre com o ano de Lancamento: ");
scanf("%d",&p->id[cont].ano);
printf ("Entre com o tipo de midia do filme( 1.[DVD] - 2.[BLU-RAY] )");
scanf("%s",&p->id[cont].midia);
if(strcmp(p->id[cont].midia,"1")== FALSE){//compara o que foi digitado
strcpy(p->id[cont].midia, "DVD");
}else{
strcpy(p->id[cont].midia, "BLU-RAY"); //copia o nome na variavel
}
strcpy(p->id[cont].status, "NAO");

printf("\n\nConfirma dados?: S ou N");
opcao = getch();
fflush(stdin);
if(toupper(opcao)==toupper('s')){ // deixa aopção em caixa alta
p->aux = cont;
break;
} else if(toupper(opcao)==toupper('n')){
break;
}
printf("\nDados inválidos... selecione S ou N: \n");
}while((opcao != toupper('s')) || (opcao!=toupper('n')));

}
int main (void ) {


int opcao;
FILE *arq;
indice funcionario;

do{
system("cls");
printf("\n===========================LOCADORA==========================\n\n\n");
printf("\nSelecione a opcao: \n\n");
printf("1- : Cadastrar Filme.\n");
printf("2- : Exibir Filmes Cadastrados.\n");
printf("3- : Gravar Dados.\n");
printf("4- : Recuperar Dados(ler dados).\n");
printf("5- : Sair do Sistema.\n");
scanf("%d", &opcao);
fflush(stdin);

switch(opcao){
case 1:
cadastrarFilme(&funcionario);
break;
case 2:
exibirDados(&funcionario);
break;
case 3:
gravarDados(&funcionario,arq);
break;
case 4:
lerDados(&funcionario,arq);
break;
case 5:
break;
default:
printf("\nOpcao invalida selecione uma das opções acima.\n");
system("PAUSE");
break;
}
}while(opcao!= 5);

system("pause");
exit(0);

}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...