Manipulação de arquivos na linguagem C

Na linguagem C, a manipulação de arquivos é feita através das funções da biblioteca padrão stdio.h. Essas funções permitem abrir, ler, escrever e fechar arquivos.

Para abrir um arquivo em C, você precisa de um ponteiro para a estrutura de arquivo FILE. A função fopen é usada para abrir um arquivo com um determinado modo de acesso. Por exemplo, para abrir um arquivo no modo de leitura, você pode usar a função fopen("arquivo.txt", "r");.

Para ler ou escrever em um arquivo em C, você pode usar as funções fread e fwrite. A função fread lê um número especificado de bytes do arquivo para uma variável, enquanto a função fwrite escreve um número especificado de bytes de uma variável para o arquivo.

Para fechar um arquivo em C, você pode usar a função fclose. É importante fechar um arquivo depois de ter terminado de usá-lo, pois isso libera recursos do sistema e evita que outros processos acessem o arquivo.

A seguir, um exemplo de como abrir, escrever e fechar um arquivo em C:

int main() {
FILE *fp;
fp = fopen("arquivo.txt", "w");
if(fp == NULL) {
printf("Erro ao abrir o arquivo\n");
return 1;
}
fprintf(fp, "Ola, sou aluno da UTFPR!\n");
fclose(fp);
return 0;
}

Neste exemplo, a função fopen é usada para abrir um arquivo chamado “arquivo.txt” no modo de escrita. A função fprintf é usada para escrever a string “sou aluno da UTFPR!” no arquivo. Finalmente, a função fclose é usada para fechar o arquivo.

A manipulação de arquivos em C pode ser complexa e requer atenção para evitar erros e problemas de segurança. É importante validar entradas de usuário para garantir que não contenham caracteres perigosos ou strings longas que possam causar um estouro de buffer. Além disso, o código deve verificar se o arquivo foi aberto com sucesso antes de tentar ler ou escrever nele.

A seguir, um exemplo de como usar as funções para manipulação de arquivos em C para ler o conteúdo de um arquivo e imprimir na tela:

int main() {
FILE *fp;
char linha[100];
fp = fopen("arquivo.txt", "r");
if(fp == NULL) {
printf("Erro ao abrir o arquivo\n");
return 1;
}
while(fgets(linha, 100, fp) != NULL) {
printf("%s", linha);
}
fclose(fp);
return 0;
}

Hora de programar! Desenvolva os exercícios propostos em sala de aula. Cole no comentário um exercício desenvolvido utilizando a manipulação de arquivos.

Fonte: Pexels.

6 comentários em “Manipulação de arquivos na linguagem C

  1. Ex1 // lista 7
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    FILE *arq;
    char nome[100];
    char curso[50];
    int RA, n1, n2;

    arq = fopen("ALUNOS.txt" , "a+");
    
    if (arq == NULL) {
        printf("Houve um erro ao abrir o arquivo. O programa será fechado.\n");
        system ("pause");
        exit(1);
    }
    
    printf("Arquivo criado com sucesso.\n\n");
    printf("\nDigite o nome: ");
    gets(nome);
    printf("\nDigite o curso: ");
    gets(curso);
    printf("\nDigite o RA: ");
    scanf("%d" , &RA);
    printf("\nDigite a primeira nota: ");
    scanf("%d" , &n1);
    printf("\nDigite a segunda nota: ");
    scanf("%d" , &n2);
    
    fputs(nome,arq);
    fputc('\n' , arq);
    
    
    if (ferror(arq)) {
        printf("Erro na gravação do arquivo");
        system ("pause");
        fclose (arq);
        exit(1);
    }
    
    fclose(arq);
    
    printf("\n\nArquivo criado com sucesso.\n");
    printf("\n\n");
    system("pause");
    
    return 0;
    

    }

    Curtir

  2. EX_1

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

    int main() {
    FILE * arq;
    fopen(“ALUNOS.txt”, “a+”);
    char nome[100], curso[100];
    int ra, n1, n2, OP;

    if (arq == NULL) {
        printf("Houve um problema ao criar o arquivo.\n");
        system("pause");
        exit(1);
    }
    
    do {
        printf("Deseja cadastrar um novo aluno:\n");
        printf("Digite:\n1 - SIM\n2 - NAO\n");
        scanf("%d", &OP);
    
        if (OP == 1) {
            printf("Informe o nome do aluno:\n");
            scanf("%s", nome);
            printf("\nInforme o curso do aluno:\n");
            scanf("%s", curso);
            printf("\nInforme o numero do RA do aluno:\n");
            scanf("%d", &ra);
            printf("\nInforme a nota 1 do aluno:\n");
            scanf("%d", &n1);
            printf("\nInforme a nota 2 do aluno:\n");
            scanf("%d", &n2);
    
            fprintf(arq, "Nome: %s\n", nome);
            fprintf(arq, "RA: %d\n", ra);
            fprintf(arq, "Curso: %s\n", curso);
            fprintf(arq, "Nota 1: %d\n", n1);
            fprintf(arq, "Nota 2: %d\n", n2);
            fprintf(arq, "\n");
        }
        else {
            printf("Cadastro encerrado.\n");
        }
    } while (OP == 1);
    
    fclose(arq);
    
    printf("\n\nArquivo criado/atualizado com sucesso.\n\n");
    system("pause");
    
    return 0;
    

    }

    Curtir

  3. EX:1

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

    int main ()
    {
    FILE *arq;
    char nome[100], curso[100];
    int RA, N1, N2;

    arq = fopen("ALUNOS.txt", "w");
    
    if (arq == NULL) {
          printf ("Houve um erro ao abrir o arquivo. O programa será fechado.\n");
          system ("pause");
          exit(1);
    }
    
    
    printf("Informe o nome do aluno:\n");
    gets(nome);
    printf("\nInforme o nome do curso:\n");
    gets(curso);
    printf("\nInforme o ra do aluno:\n");
    scanf("%d",&RA);
    printf("\nInforme a nota 1:\n");
    scanf("%d",&N1);
    printf("\nInforme a nota 2:\n");
    scanf("%d",&N2);
    
    
    fputs(nome, arq);
    fputc('\n', arq);
    fputs(curso, arq);
    fputc('\n', arq);
    fprintf(arq, "%d", RA);
    fputc('\n', arq);
    fprintf(arq, "%d", N1);
    fputc('\n', arq);
    fprintf(arq, "%d", N2);
    fputc('\n', arq);
    
    
    
    
    if(ferror (arq))
    {
        printf("Erro na gravacao do arquivo");
        system("pause");
        fclose(arq);
        exit(1);
    }
    
    fclose (arq);
    
    printf("\n\nArquivo criado com sucesso.\n");
    printf("\n\n");
    system("pause");
    return 0;
    

    }

    Curtir

  4. Lista 8:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define NOME 100
    #define SEXO 20
    #define ARQUIVO “resposta.txt”

    typedef struct {
    char nome[NOME];
    char sexo[SEXO];
    int i;
    float rendamensal;
    int fumante;
    int gostaesportes;
    int praticaatividadefisica;
    } Entrevista;

    void cadastrarEntrevista();
    void pesquisarEntrevista();
    void gerarEstatisticas();

    int main() {
    int op;

    do {
        printf(">>>MENU<<<\n");
        printf("1- Cadastrar uma nova entrevista\n");
        printf("2- Pesquisar uma entrevista pelo nome\n");
        printf("3- Gerar estatisticas das entrevistas\n");
        printf("4- Sair\n");
        printf("Escolha uma opcao: ");
        scanf("%d", &op);
        getchar(); 
    
        switch (op) {
            case 1:
                cadastrarEntrevista();
                break;
            case 2:
                pesquisarEntrevista();
                break;
            case 3:
                gerarEstatisticas();
                break;
            case 4:
                printf("Encerrando o programa\n");
                break;
            default:
                printf("Opcao invalida. Tente novamente.\n");
                break;
        }
    
        printf("\n");
    } while (op != 4);
    
    return 0;
    

    }

    void cadastrarEntrevista() {
    Entrevista novaEntrevista;
    FILE* arquivo = fopen(ARQUIVO, “a”);

    printf("==== Cadastro de Nova Entrevista ====\n");
    printf("Nome: ");
    fgets(novaEntrevista.nome, NOME, stdin);
    novaEntrevista.nome[strcspn(novaEntrevista.nome, "\n")] = '\0';
    
    printf("Sexo (Feminino/Masculino/Outro): ");
    fgets(novaEntrevista.sexo, SEXO, stdin);
    novaEntrevista.sexo[strcspn(novaEntrevista.sexo, "\n")] = '\0';
    
    printf("Idade: ");
    scanf("%d", &novaEntrevista.i);
    
    printf("Renda mensal: ");
    scanf("%f", &novaEntrevista.rendamensal);
    
    printf("E fumante? (0-Nao / 1-Sim): ");
    scanf("%d", &novaEntrevista.fumante);
    
    printf("Gosta de esportes? (0-Nao / 1-Sim): ");
    scanf("%d", &novaEntrevista.gostaesportes);
    
    printf("Pratica atividade fisica? (0-Nao / 1-Sim): ");
    scanf("%d", &novaEntrevista.praticaatividadefisica);
    
    fprintf(arquivo, "%s;%s;%d;%.2f;%d;%d;%d\n", novaEntrevista.nome, novaEntrevista.sexo,
            novaEntrevista.i, novaEntrevista.rendamensal, novaEntrevista.fumante,
            novaEntrevista.gostaesportes, novaEntrevista.praticaatividadefisica);
    
    fclose(arquivo);
    printf("Entrevista cadastrada com sucesso!\n");
    

    }

    void pesquisarEntrevista() {
    char nomepesquisado[NOME];
    FILE* arquivo = fopen(ARQUIVO, “r”);
    char l[256];
    int enc = 0;

    printf("==== Pesquisa de Entrevista ====\n");
    printf("Digite o nome do entrevistado: ");
    fgets(nomepesquisado, NOME, stdin);
    nomepesquisado[strcspn(nomepesquisado, "\n")] = '\0';
    
    while (fgets(l, sizeof(l), arquivo)) {
        char* token = strtok(l, ";");
        if (strcmp(token, nomepesquisado) == 0) {
            enc = 1;
            printf("Entrevista encontrada:\n");
            printf("Nome: %s\n", token);
            printf("Sexo: %s\n", strtok(NULL, ";"));
            printf("Idade: %d\n", atoi(strtok(NULL, ";")));
            printf("Renda mensal: %.2f\n", atof(strtok(NULL, ";")));
            printf("E fumante? %s\n", atoi(strtok(NULL, ";")) ? "Sim" : "Nao");
            printf("Gosta de esportes? %s\n", atoi(strtok(NULL, ";")) ? "Sim" : "Nao");
            printf("Pratica atividade fisica? %s\n", atoi(strtok(NULL, ";")) ? "Sim" : "Nao");
            break;
        }
    }
    
    if (!enc) {
        printf("Entrevista nao encontrada.\n");
    }
    
    fclose(arquivo);
    

    }

    void gerarEstatisticas() {
    FILE* arquivo = fopen(ARQUIVO, “r”);
    char l[256];
    int totalentrevistas = 0;
    int totalhomens = 0;
    int totalmulheres = 0;
    int totalpessoas = 0;
    int totalfumantes = 0;
    float somarendas = 0;

    while (fgets(l, sizeof(l), arquivo)) {
        totalentrevistas++;
        char* token = strtok(l, ";");
        char* sexo = strtok(NULL, ";");
        int idade = atoi(strtok(NULL, ";"));
        float renda = atof(strtok(NULL, ";"));
        int fumante = atoi(strtok(NULL, ";"));
    
        if (strcmp(sexo, "Masculino") == 0) {
            totalhomens++;
        } else if (strcmp(sexo, "Feminino") == 0) {
            totalmulheres++;
        }
    
        if (idade >= 18 && idade <= 40) {
            totalpessoas++;
        }
    
        if (fumante) {
            totalfumantes++;
        }
    
        somarendas += renda;
    }
    
    printf("==== Estatisticas das Entrevistas ====\n");
    printf("Total de entrevistas: %d\n", totalentrevistas);
    printf("Percentual de homens: %.2f%%\n", (float) totalhomens / totalentrevistas * 100);
    printf("Percentual de mulheres: %.2f%%\n", (float) totalmulheres / totalentrevistas * 100);
    printf("Percentual de pessoas entre 18 e 40 anos: %.2f%%\n", (float) totalpessoas / totalentrevistas * 100);
    printf("Percentual de fumantes: %.2f%%\n", (float) totalfumantes / totalentrevistas * 100);
    printf("Renda media dos entrevistados: %.2f\n", somarendas / totalentrevistas);
    
    fclose(arquivo);
    

    }

    Curtir

  5. /* Manipulação de Arquivo Parte 3 */

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

    int main ()
    {
    FILE *arq;
    char linha[100];
    char *conseguiuLer;

    char c;
    
    if ((arq = fopen("Teste.txt", "a+")) == NULL) {
          printf ("Houve um erro ao abrir o arquivo. O programa sera fechado.\n");
          system ("pause");
          exit(1);
    }
    /*
    while (!feof(arq)) //condição para ler até o fim do arquivo
    {
          conseguiuLer = fgets(linha, 100, arq); // "fgets" lê até 99 aracteres ou até o  "\n"
          if (conseguiuLer){ // se foi possível realizar a leitura
             printf ("%s", linha);
          }
    }
    */
    
    /*
    while (!feof(arq))
    {
          c = fgetc(arq); //lê caractere por caractere
          printf("%c", c);
    }
    */
    
    /*
    while (!feof(arq))
    {
          fscanf(arq, "%c", &c); //fara a leitura formatada do arquivo, lê caractere por caractere
          printf("%c", c);
          c = ' '; //para não repetir o último caractere
    }
    */
    
    /* E se desejar ir para um ponto determinado do arquivo?
    Para realizar buscas e acessos randômicos a arquivos, utilizamos a função
    fseek(), que move o ponteiro da posição corrente de leitura/escrita no arquivo
    para a posição especificada.
    
    Seu protótipo pode ser descrito do modo abaixo:
    
        int fseek(FILE *fp,long numbytes, int origem);
    
    O parâmetro de "origem" determina a partir de onde os numbytes serão contados
    para a movimentação.
    
    Os valores para o parâmetro origem estão na tabela abaixo:
    
    Nome            Valor              Significado
    
    SEEK_SET        0                  Início do arquivo
    SEEK_CUR        1                  Ponto corrente no arquivo
    SEEK_END        2                  Fim do arquivo
    */
    
    /*
    fseek(arq, sizeof(char)-2,2); //tamanho dos bytes. coloca o ponteiro antes do último caractere do arquivo
    c = getc(arq);
    printf ("Ultimo caractere do arquivo: %c\n\n", c);
    
    rewind(arq); //coltando o ponteiro para o início do arquivo
    c = getc(arq);
    printf ("Primeiro caractere do arquivo: %c\n", c);
    */
    
    fclose(arq);
    
    //remove("teste.txt");
    
    printf ("\n\n");
    system ("pause");
    return 0;
    

    }

    Curtir

  6. /* Manipulação de Arquivo – Parte 2 */

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

    /* Para escrever em arquivos podemos usar 4 funções:

        fputc = imprime apenas um caractere;
        fputs = imprime uma string diretamente, sem nenhuma formatação;
        fprintf = imprime uma string formatada;
        fwrite = grava dados binários para um arquivo.
    

    Para ler arquivos também usamos 4 funções:

     fgetc = recebe apenas um caractere;
     fgets = lê uma string (geralmente uma linha inteira);
     fscanf = recebe uma string formatada;
     fread = lê dados binários de um arquivo.
    

    Outras funções:

       feof = detecta se o sinal do arquivo já foi atingido;
       ferror = verifica se a última operação de leitura ou escrita foi executada com sucesso;
       fseek = movimenta o indicador de posição dentro do arquivo para um local especificado;
       rewind = volta para o começo do arquivo;
       remove = remove um arquivo especificado.
    

    */

    int main ()
    {
    FILE *arq;
    char RA[100],NOME[100],CURSO[100];
    int NOTA1,NOTA2;

    arq = fopen("ALUNOS.txt", "a");
    
    if (arq == NULL)
    {
        printf ("Houve um erro ao abrir o arquivo. O programa será fechado.\n");
        system ("pause");
        exit(1);
    }
    
    printf("Arquivo criado com sucesso.\n\n");
    

    while (1) {
    printf(“\nDigite o RA do aluno: “);
    gets(RA);

        // Verifica se o RA já existe no arquivo
        if (isRAExists(RA, arq)) {
            printf("RA já existente. Digite um RA válido.\n");
        } else {
            // RA válido, sai do loop
            break;
        }
    

    }

    printf("\nDigite o nome do aluno: ");
    gets(NOME);
    
    printf("\nDigite o curso: ");
    gets(CURSO);
    
    printf("\nDigite a Nota 1: ");
    scanf("%d", &NOTA1);
    
    printf("\nDigite a nota2: ");
    scanf("%d", &NOTA2);
    
    fprintf(arq, "RA:\t");
    fputs(RA, arq);
    fputc('\n', arq);
    fprintf(arq, "ALUNO:\t");
    fputs(NOME, arq);
    fputc('\n', arq);
    fprintf(arq, "CURSO:\t");
    fputs(CURSO, arq); // recebo 2 paraâmetros string = o que eu quero gravar e arq = onde.
    fputc('\n', arq); //colocar uma quebra de linha.
    fprintf(arq, "NOTA1:\t");
    fprintf(arq, "%d",NOTA1); //realizar uma inserção formatada no meu arquivo.
    fputc('\n', arq); //colocar uma quebra de linha.
    fprintf(arq, "NOTA2:\t");
    fprintf(arq, "%d",NOTA2); //realizar uma inserção formatada no meu arquivo.
    fputc('\n', arq);
    fputc('\n', arq);
    
    
    
    
    if(ferror (arq))
    {
        printf("Erro na gravacao do arquivo");
        system("pause");
        fclose(arq);
        exit(1);
    }
    
    fclose (arq);
    
    printf("\n\nArquivo criado com sucesso.\n");
    printf("\n\n");
    system("pause");
    return 0;
    

    }

    Curtir

Deixar mensagem para Thaís Camargo Cancelar resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.