Bom, implementei programas de cópia de arquivo por caracter, linha e bloco... mas o de bloco tem um pequeno erro.
O programa consiste em informar um RGM e o nome do aluno (RGM e Aluno em uma struct)... quando quiser parar, informe -1 para o RGM. Então a ultima struct informada (RGM e Aluno), são repetidos no arquivo de saída, aparecem dois iguais... por exemplo:
Programa sendo executado:
RGM: 12
Aluno: Aline
RGM: 15
Aluno: Gessica
RGM: -1
process returned 1 (0x1) execution time...
Ok.
Lá na pasta onde estou gravando o .txt com o arquivo de Entrada e o de Saida(cópia)... o de Entrada está perfeito, enquanto o de Saída repete as informações da ultima struct, no caso do exemplo, exibe Géssica e seu rgm duas vezes.
Pergunta
AlineI
Bom, implementei programas de cópia de arquivo por caracter, linha e bloco... mas o de bloco tem um pequeno erro.
O programa consiste em informar um RGM e o nome do aluno (RGM e Aluno em uma struct)... quando quiser parar, informe -1 para o RGM. Então a ultima struct informada (RGM e Aluno), são repetidos no arquivo de saída, aparecem dois iguais... por exemplo:
Programa sendo executado:
RGM: 12
Aluno: Aline
RGM: 15
Aluno: Gessica
RGM: -1
process returned 1 (0x1) execution time...
Ok.
Lá na pasta onde estou gravando o .txt com o arquivo de Entrada e o de Saida(cópia)... o de Entrada está perfeito, enquanto o de Saída repete as informações da ultima struct, no caso do exemplo, exibe Géssica e seu rgm duas vezes.
Aí vai o código:
#include <stdio.h> #include <stdlib.h> typedef struct { char nome[20]; int rgm; }tReg; tReg regAluno; unsigned CopiaArqPorBloco (const char *arqDeEntrada, const char *arqDeSaida) { FILE *ptrEntrada, *ptrSaida; /*streams*/ char c; ptrEntrada = fopen(arqDeEntrada, "rb"); if(ptrEntrada == NULL) return 0; ptrSaida = fopen(arqDeSaida, "wb"); if(ptrSaida == NULL) { fclose(ptrEntrada); return 0; } do { fread (®Aluno, sizeof(tReg), 1, ptrEntrada); fwrite (®Aluno, sizeof(tReg), 1, ptrSaida); }while (!feof(ptrEntrada)); fclose(ptrEntrada); fclose(ptrSaida); return 1; } int CriaArq(char *nomeArq) { FILE *ptrArq; tReg Aluno; ptrArq = fopen(nomeArq, "wb"); if (ptrArq == NULL) return 0; do { printf("RGM: "); scanf("%d", &Aluno.rgm); if (Aluno.rgm!= -1) { printf("Nome: "); scanf("%s", Aluno.nome); fwrite (&Aluno, sizeof(tReg), 1, ptrArq); } }while (Aluno.rgm != -1); fclose(ptrArq); return 1; } int main() { char *nomeArqE, *nomeArqS; //printf("Informe o nome do Arquivo: "); //scanf("%s", nomeArq); nomeArqE = "ArqEntrada.txt"; nomeArqS = "ArqSaida.txt"; if (!CriaArq(nomeArqE)) { printf("Falhou CriaArq"); return 0; } if (!CopiaArqPorBloco(nomeArqE, nomeArqS)) { printf("Falhou CopiaArqPorBloco"); return 0; } return 1; }Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.