Entrada/Saída padrão
O ponteiro do arquivo
Para trabalharmos com arquivos utilizamos a variável ponteiro do tipo FILE. O comando deve ser utilizado da seguinte forma:
FILE *fp;
Abrindo um arquivo
FILE *fopen(char *nomearq, char *modo_abertura)
Onde:
<nomearq> é um ponteiro para o nome de um arquivo.
<modo_abertura> determina como o arquivo será aberto.
A string modo_abertura pode conter alguns dos seguintes caracteres:
Modo |
Significado |
r |
Abre um arquivo-texto para leitura. |
w |
Cria um arquivo-texto para escrita. |
a |
Anexa a um arquivo-texto. |
rb |
Abre um arquivo-binário para leitura. |
wb |
Cria um arquivo-binário para escrita. |
ab |
Anexa a um arquivo binário. |
r+ |
Abre um arquivo-texto para leitura/escrita. |
w+ |
Cria um arquivo-texto para leitura/escrita. |
a+ |
Anexa ou cria um arquivo-texto para leitura/escrita. |
r+b |
Abre um arquivo binário para leitura/escrita. |
w+b |
Cria um arquivo binário para leitura/escrita. |
a+b |
Anexa um arquivo binário para leitura/escrita. |
FILE *fp;
if(fopen(“teste”,”w”)==NULL)
{ printf(“Arquivo nao pode ser aberto\n”);
exit(1);
}
Fechando um arquivo
int fclose(FILE *arquivo)
Fecha um arquivo. Retorna 0 se OK, qualquer outro valor indica erro.
fclose(arquivo);
Escrevendo um caractere
int fputc(FILE *arquivo)
Escreve um caracter no arquivo. Retorna o caracter lido ou EOF em caso de erro ou final de arquivo.
if (fputc(‘x’,arq)==EOF)
printf(“Nao foi possivel gravar”);
Lendo um caractere
int fgetc(FILE *arquivo)
Lê um caracter do arquivo. Retorna o caracter lido ou EOF em caso de erro ou final de arquivo. A seguir, um exemplo que utiliza os comandos fopen, fgetc e fclose.
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int c;
if((fp=fopen("teste.txt","rt"))==NULL)
{
printf("O arquivo nao pode ser aberto");
system("Pause");
exit(1);
}
do{//lê cada caracter do arquivo e imprime
c=fgetc(fp);
if (c==EOF) //se é final de arquivo
break;
printf("%c",c);
}
while(1);
fclose(fp);
system("Pause");
Usando feof()
int feof(FILE *fp)
Retorna verdadeiro se o final de arquivo foi atingido; caso contrário, devolve 0.
Trabalhando com strings
int fputs(char *str, FILE *fp)
Escreve uma string em um arquivo, retorna o último caracter gravado ou EOF em caso de erro.
char *fgets(char *str, int tamanho, FILE *fp)
Lê uma linha de texto do arquivo, retorna um ponteiro para a string lida ou NULL em caso de erro ou final de arquivo.
Usando Rewind
void rewind(FILE *fp)
O ponteiro é apontado para o início do arquivo, é como se o arquivo fosse rebobinado.
Usando fputs, fgets, rewind e feof
O exemplo a seguir lê strings do teclado até ser pressionada a tecla enter, em seguida as grava no arquivo e mostra o conteúdo do arquivo.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
char s[100];
if((fp=fopen("teste.txt","w+"))==NULL)
{ printf("O arquivo nao pode ser aberto");
system("Pause");
exit(1);
}
do{
printf("Digite uma string (enter para sair)!\n");
gets(s);
strcat(s,"\n"); //adiciona uma nova linha a string
fputs(s,fp) ; //coloca a string no arquivo
}
while(*s!='\n');
rewind(fp);
while(!feof(fp)) //testa se não é final de arquivo
{
fgets(s,99,fp); //pega a string do arquivo
printf("%s",s);
}
fclose(fp);
system("Pause");
return 0;
}
Apagando Arquivos
int remove(char *filename)
Apaga o arquivo especificado. Ele devolve 0, caso consiga, e um valor diferente de 0, caso contrário.
O exemplo tenta apagar o arquivo “teste.txt”, caso consiga imprime mensagem mostrando o fato:
#include<stdio.h>
#include<stdlib.h>
int main()
{
if(remove("teste.txt"))
{
printf("O arquivo nao pode ser apagado!\n");
system("Pause");
exit(1);
}
else
printf("Arquivo apagado!\n");
system("Pause");
return 0;
}
Usando fread() e fwrite()
Essas funções permitem a leitura e escrita de blocos de qualquer tipo de dado. Elas são utilizadas quando trabalhamos com arquivos binários.
A função fread devolve o número de itens lidos (não o número de bytes).
size_t fread(void *buffer, size_t num_bytes, size_t count, FILE *fp)
onde:
<buffer>: Ponteiro para uma região da memória, geralmente uma estrutura ou um vetor, onde serão armazenados os dados lidos do arquivo.
<num_bytes>: Número de bytes a ler. Geralmente sizeof(buffer).
<count>: Número de itens a ler. Geralmente 1.
<fp>: Ponteiro FILE para um arquivo aberto anteriormente por fopen().
A função fwrite devolve o número de itens gravados.
size_t fwrite (void *buffer, size_t num_bytes, size_t count, FILE *fp)
onde:
<buffer>: Ponteiro para uma região da memória, geralmente uma estrutura ou um vetor, onde estão armazenados os dados a serem escritos no arquivo.
<num_bytes>: Número de bytes a escrever. Geralmente sizeof(buffer).
<count>: Número de itens a escrever. Geralmente 1.
<fp>: Ponteiro FILE para um arquivo aberto anteriormente por fopen().
Exemplo da utilização do fread e fwrite:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *pf;
float pi = 3.1415;
float pilido;
if((pf = fopen("arquivo.bin", "wb")) == NULL) /* Abre arquivo binário para escrita */
{
printf("Erro na abertura do arquivo");
system("Pause");
exit(1);
}
if(fwrite(&pi, sizeof(float), 1,pf) != 1) /* Escreve a variável pi */
printf("Erro na escrita do arquivo");
fclose(pf); /* Fecha o arquivo */
if((pf = fopen("arquivo.bin", "rb")) == NULL) /* Abre o arquivo novamente para leitura */
{
printf("Erro na abertura do arquivo");
system("Pause");
exit(1);
}
if(fread(&pilido, sizeof(float), 1,pf) != 1) /* Lê em pilido o valor da variável armazenada anteriormente */
printf("Erro na leitura do arquivo");
printf("\nO valor de PI, lido do arquivo e': %f", pilido);
fclose(pf);
system("Pause");
return(0);
}
Referênicas
SCHILDT, Herbert. C, completo e total. São Paulo: Pearson Makron Books, 1997.