Linguagem C: Manipulação de Arquivos

De Aulas
Revisão de 13h26min de 9 de outubro de 2019 por Admin (discussão | contribs) (→‎Escrevendo um arquivo texto)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

Voltar para Programação em C

Definição

Uma das formas de armazenar informações persistentes de um programa de computador é utilizando um sistema de gravação e leitura das informações em um arquivo.

Escrevendo um arquivo texto

O exemplo abaixo mostra como criar um arquivo texto com strings entradas pelo usuário.

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include <string.h>
 4
 5int main(int argc, char *argv[]) {
 6    if (argc <= 1) {
 7        printf("digite o nome do arquivo.\n");
 8        exit(1);
 9    }
10    FILE *arq = fopen(argv[1], "w");
11    if (arq == NULL) {
12        printf("Erro na criação do arquivo.\n");
13        exit(2);
14    }
15    printf("Digite seu texto. Para finalizar, digite sair em uma nova linha:\n");
16    char linha[255] = "";
17    // usar o strstr porque o fgets insere o enter à string
18    while (strstr(linha, "sair") == NULL) {
19        if(fgets(linha, sizeof(linha), stdin) != NULL) {
20            if (strstr(linha, "sair") != NULL) {
21                fputs(linha, arq);
22            }
23        }
24    }
25    fclose (arq);
26}

Tpl warning.png

Poderia-se para se utilizar gets, mas seu uso é desaconselhável por ser perigoso. Ao invéz disso, use o fgets, isso porque o gets não apenas usa stdin como fonte, mas também não inclui o caractere de nova linha final na string resultante e não permite especificar um tamanho máximo para str, o que pode levar ao famigerado buffer overflows.

Lendo um arquivo texto

Este exemplo lê um arquivo texto e apresenta as informações na tela.

 1#include <stdio.h>
 2#include <stdlib.h>
 3
 4int main(int argc, char *argv[]) {
 5    if (argc <= 1) {
 6        printf("Digite o nome do arquivo.\n");
 7        exit(1);
 8    }
 9    FILE *arq = fopen(argv[1], "r");
10    if (arq == NULL) {
11        printf("Erro na leitura do arquivo.\n");
12        exit(2);
13    }
14    char linha[100];
15    while (fgets(linha, 100, arq) != NULL) {
16        printf("%s", linha);
17    }
18    fclose(arq);
19}

Exercícios

  1. Faça um programa que le um arquivo texto e imprime somente as linhas que tenham determinada palavra (grep).
  2. Faça um programa que lê nomes e idades de um arquivo texto e armazena esta informação em dois vetores.
  3. Ler um arquivo texto e gravar em outro arquivo de forma invertida. (pense em vários possíveis soluções e compare elas).
  4. Fazer programa que imprime apenas a linha n de um arquivo passado como parâmetro.