Em muitas situações ao se codificar programas, o tamanho da entrada e/ou da saída de um programa pode ser relativamente grande, inviabilizando que ambas estejam visualizadas no terminal (tela). Logo, C permite que tanto a entrada quanto a saída também sejam um arquivo, facilitando assim passar os dados para o programa e recebendo a resposta de uma maneira mais organizada.
Primeiramente, deve-se saber que as funções relativas à arquivo estão já na biblioteca stdio.h (IO = Input/Output = Entrada/Saída). Porém, também precisaremos da stdlib.h, pois será necessário utilizar uma função desta biblioteca que tratará o erro relativo ao caso do arquivo a ser usado no programa não existir ou não haver memória suficiente para criá-lo.
OK, agora irei explicar aqui os passos para se trabalhar com arquivos em C:
1-> Declarar uma variável do tipo arquivo (uma variável para cada arquivo a ser utilizado). Como a declaração de variáveis de tipo int, float, double e char, ela também deve ser feita no início de uma função.
...
FILE * arquivo;
...
Como vocês devem lembrar o * indica que a variável é um ponteiro. Ela aponta para o arquivo na memória do computador.
2-> Uma vez declarada, agora você deve associar esta variável a um arquivo existente ou a um arquivo a ser criado, chamando a função fopen (chamamos esta ação também de abrir o arquivo). O primeiro parâmetro desta função é o nome do arquivo (em PROG iremos apenas trabalhar com arquivos .txt), e em seguida o modo em que este arquivo será trabalho. Não se deve esquecer de fazer o tratamento de erro citado anteriormente. Ele é feito com o comando exit(1); que aborta o programa imediatamente e fecha todos os arquivos que tenham sido abertos.
exemplo:
arquivo = fopen("entrada.txt", "r");
if ( arquivo == NULL )
{
printf("Erro na abertura do arquivo!\n");
exit(1);
}
Repare que se a função fopen não conseguir abrir o determinado arquivo ela retorna NULL para a variável arquivo.
Em PROG, só usaremos dois modos, "r" para leitura de arquivo e "w" para gravação de arquivo.
3-> Agora iremos ver como manipular este arquivo. Caso você esteja lendo arquivo, para ler as informações contidas nele, a função fscanf deve ser chamada. É praticamente idêntica à função scanf, a única informação a mais a ser passada é o nome da variável onde você armazenou o retorno da fopen (que seria o arquivo aberto). A fscanf também retorna a quantidade de dados lidos com sucesso a cada execução:
exemplo:
para ler do arquivo os dados
1 2 3
4 5 6
faz-se:
while ( fscanf( arquivo, "%d%d%d", &a,&b,&c) == 3 )
{
"operações a serem feitas com os valores lidos"
}
Traduzindo: "Enquanto forem lidos 3 valores por linha do arquivo, fazer..."
É importante ver que para o mesmo arquivo é válido fazer:
while(fscanf( arquivo, "%d", &a)==1)
{
"operações a serem feitas com o valor lido"
}
Quantos valores você vai ler por vez no fscanf depende unicamente do seu objetivo e é importante observar que ele separa os valores por 'caracteres brancos' que seriam tablações, espaços e quebras de linha.
Agora para imprimir, usamos a função fprintf, que também é análoga à função printf, sendo que também precisamos informar a variável do arquivo em que os dados serão escritos:
exemplo:
fprintf(arquivo,"%d\t%d\t%d", a,b,c);
4-> Finalmente, quando todas as operações em cima do arquivo forem completas, o arquivo, tendo sido aberto, agora precisa ser fechado. Para isto basta utilizar a função fclose, passando como parâmetro a variável do arquivo:
fclose(arquivo);
Quando o seu programa termina os arquivos são fechados automaticamente, mas para programas grandes e que ficarão executando por algum tempo, como um sistema operacional, é primordial que o fclose seja feito. Ainda assim, a boa prática de programação é sempre dar fclose nos seus arquivos. Se isso não te convence... você pode perder pontos na prova por esquecer um fclose.
É isso, espero ter ajudado! Bons estudos e até a próxima!
Por André Calfa
Nenhum comentário:
Postar um comentário