duvidas no fread (lendo arquivo binario)

19/10/2007

1

galera, to comecando agora com c/c++
tem um projetinho de faculdade que eh um lance de cadastro de fornecedores, e tenho que utilizar um arquivo binario.

existe uma rotina para listar todos os registros desse arquivo, so que ela lista apenas o ultimo, e em duplicidade.. :shock:
como é que pode?!?!?

tambem estou com dificuldades na rotina de localizar determinado registro...
acredito que seja o mesmo problema da rotina Listar().
segue o codigo.

// ABERTURA DOS ARQUIVOS void AbrirArquivoSetor(){ arqSetor = fopen(´setor.db´,´rb+´); if (arqSetor == NULL) arqSetor = fopen(´setor.db´, ´wb+´); } void AbrirArquivoFunc(){ arqFunc = fopen(´func.db´,´rb+´); if (arqFunc == NULL) arqFunc = fopen(´func.db´, ´wb+´); } void AbrirArquivoFinan(){ arqFinan = fopen(´finan.db´,´rb+´); if (arqFinan == NULL) arqFinan = fopen(´finan.db´, ´wb+´); } // LOCALIZAR REGISTRO NO ARQUIVO bool Localizar(int nCodigo, int nTipo){ if (nTipo == 1) { // Setor rewind(arqSetor); while (fread(&arqSetor, sizeof(arqSetor), 1, arqSetor )) if (regSetor.nCodigo == nCodigo) { fseek(arqSetor, ftell(arqSetor)-sizeof(regSetor), SEEK_SET); return (true); } } else if (nTipo == 2) { // Funcionário rewind(arqFunc); while (fread(&regFunc, sizeof(regFunc), 1, arqFunc)) if (regFunc.DEL == 0 && regFunc.nCodigo == nCodigo){ fseek(arqFunc, ftell(arqFunc)-sizeof(regFunc), SEEK_SET); return (true); } } else if (nTipo == 3) { // Movimentação Financeira rewind(arqFinan); while (fread(&regFinan, sizeof(regFinan), 1, arqFinan)) if (regFinan.DEL == 0 && regFinan.nCodigo == nCodigo) { fseek(arqFinan, ftell(arqFinan)-sizeof(regFinan), SEEK_SET); return (true); } } return (false); } // VISUALIZAR TODOS OS REGISTROS DO ARQUIVO void Listar(int nTipo){ int nValor; char sSetor[50]; if (nTipo == 1) { // Setor printf( ´Codigo Descricao ´); printf(´\n------ ------------------------------------------------------------------------´); rewind(arqSetor); while (fread(&regSetor, sizeof(regSetor), 1, arqSetor)) if (!regSetor.DEL) { printf(´\n¬6d ¬-50s´, regSetor.nCodigo, regSetor.sDescricao); } } else if (nTipo == 2) { // Funcionário printf( ´Codigo Nome Setor Salario Data Admissao´); printf(´\n------ --------------------------------------- -------- --------- -------------´); rewind(arqFunc); while (fread(&regFunc, sizeof(regFunc), 1, arqFunc)) if (!regFunc.DEL) { if (Localizar(regFunc.nCodSetor,1)) { strcpy(sSetor,regSetor.sDescricao); } else { s trcpy(sSetor,´XXXX´); } printf(´\n¬6d ¬-50s ¬2d ¬.2f ¬2d/¬2d/¬4d´, regFunc.nCodigo, regFunc.sNome, sSetor, regFunc.nSalario, regFunc.nDiaAdmissao, regFunc.nMesAdmissao, regFunc.nAnoAdmissao); } } else if (nTipo == 3) { // Movimentação Financeira printf( ´Codigo Descricao CodFunc Valor Data Mov ´); printf(´\n------ --------------------------------------- -------- --------- -------------´); rewind(arqFunc); while (fread(&regFinan, sizeof(regFinan), 1, arqFinan)) if (!regFinan.DEL) { if (regFinan.nTipoMov == 0){ nValor = -regFinan.nValor; } else { nValor = regFinan.nValor; } printf(´\n¬6d ¬-50s ¬2d ¬.2f ¬2d/¬2d/¬4d´, regFinan.nCodigo, regFinan.sDescricao, regFinan.nCodFunc, nValor, regFinan.nDiaMov, regFinan.nMesMov, regFinan.nAnoMov); } } }


alguem poderia me ajudar?!


Responder