Arquivos
Prof. Luiz José Hoffmann Filho
[email protected]
Introdução



a linguagem C utiliza o conceito de fluxo
(stream) de dados para manipular vários
tipos de dispositivos de armazenamento.
Dados podem ser manipulados em dois
diferentes tipos de fluxos: fluxos de texto e
fluxos binários.
Um fluxo de texto é composto por uma
seqüência de caracteres, que pode ou não
ser dividida em linhas terminadas por um
caracter de final de linha.
Arquivos

Um arquivo pode estar associado a qualquer
dispositivo de entrada e saída, como por
exemplo: teclado, video, impressora, disco
rígido, etc.

O processo de trabalhar com arquivos em C
consiste em três etapas:
1. Abrir o arquivo;
2. Ler e/ou gravar as informaçõeses desejadas no
arquivo;
3. Fechar o arquivo.
Funções de entrada e saída
As funções mais usadas estão armazenadas na
biblioteca stdio.h
•
•
•
•
•
•
•
•
•
fopen() - Abre um arquivo
fputc() - Escreve um caracter em um arquivo
fgetc() - Lê um caracter de um arquivo
fputs() – escreve uma string em um arquivo
fgets() – lê uma linha de um arquivo
fprintf()- Equivalente a printf()
fscanf() - Equivalente a scanf()
rewind() - Posiciona o arquivo no início
feof() - Retorna verdadeiro se chegou ao fim do
arquivo
• fclose() – fecha
Ponteiro de Arquivo


É um ponteiro para informações que
definem várias coisas sobre o arquivo,
incluido nome, status e a posição atual do
arquivo.
Basicamente, o ponteiro de arquivo identifica
um arquivo específico em disco e é usado
pela stream associada para direcionar as
operações funções de e/s.
#include <stdio.h>
FILE *fp;
Abertura de arquivo
Antes de qualquer operação ser
executada com o arquivo, ele deve ser
aberto. Esta operação associa um fluxo de
dados a um arquivo.
 Um arquivo pode ser aberto de diversas
maneiras: leitura, escrita, leitura/escrita,
adicão de texto, etc. A função utilizada
para abrir o arquivo é fopen()

A função fopen()
fopen(nome arquivo,modo de uso).
Os modos de uso mais comuns são:
◦ r (de read) : abre um arquivo texto para leitura
◦ w (de write) : cria um arquivo texto para escrita
◦ a (de append) : para adicionar conteúdo no fim de
um arquivo texto já existente
◦ r+ : abre um arquivo texto para leitura/escrita
◦ w+ : cria um arquivo texto para leitura/escrita
◦ b para quando se tratar de arquivo binário.
A função fclose()

A função fclose() fecha um stream que foi
aberto por meio de uma chamada a
fopen();
 Protótipo da função : int fclose(FILE *fp);

Exemplo:
fclose(arquivo);
- Erros retornados pela função ferror.
Exemplo de uso
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE *arquivo; //vai ser associada ao arquivo
arquivo = fopen("c:/luiz/teste9.txt",”w");
if(arquivo==NULL)
printf(”Arquivo não pode ser aberto\n");
else
printf("Arquivo aberto com sucesso\n");
fclose(arquivo); //fecha arquivo
return 0;
}
Leitura e gravação
putc(int, arquivo)
 getc(arquivo)

Ex: do {
ch = getc(fp);
} while(ch != EOF);

Ambas devolver EOF ao chegar no final do arquivo
Exemplo : Escrita em um arquivo
#include <stdio.h>
int main(int argc, char *argv[]) {
FILE *fp;
char ch;
if(argc!=2) {
printf(“Você esqueceu de digitar o nome do
arquivo\n”);
return 0;
}
if((fp = fopen(argv[1], “w”))== NULL) {
printf(“O arquivo não pode ser aberto.\n”);
return 0;
}
do {
scanf(“%c”, &ch);
putc(ch, fp);
} while(ch!=‘$’);
fclose(fp);
return 0;
}
Exemplo: Lendo de um arquivo
#include <stdio.h>
int main(int argc, char *argv[]) {
FILE *fp;
char ch;
if(argc!=2) {
printf(“Você esqueceu de digitar o nome do
arquivo\n”);
return 0;
}
if((fp = fopen(argv[1], “r”))== NULL) {
printf(“O arquivo não pode ser aberto.\n”);
return 0;
}
ch = getc(fp); /*lê um caractere*/
while (ch!=EOF){
putchar(ch);
ch = getc(fp);
}
fclose(fp);
return 0;
}
As funcões fputs() e fgets();




Efetuam as operações de leitura e gravação de strings de caractere
de e para um arquivo em disco.
Protótipos:
 int fputs(const char *str, FILE *fp);
 char *fgets(char *str, int length, FILE *fp);
Fputs() opera como o puts(), mas escreve a string na stream
especifica. EOF será devolvido se ocorrer um erro.
Fgets() lé uma string da stream especificada até que um caractere
de nova linha seja lido ou que length-1 caracteres tenham sido
lidos. A string resultante será terminada por um nulo. A função
retorna um ponteiro para str se bem-sucedida ou um ponteiro
nulo se ocorrer um erro.
Exemplo: fgets(), fputs()
#include <stdio.h>
#include <string.h>
int main() {
char str[80];
FILE *fp;
if((fp = fopen(“TEST”, “w”)) == NULL) {
printf(“O arquivo não pode ser aberto.\n”);
return 0;
}
do {
printf(“Digite um string :\n”);
fgets(str, 80, stdin);
strcat(str, “\n”);
fputs(str, fp);
} while(*str != “\n”);
fclose(fp);
return 0;
}
Função rewind()
Reposiciona o indicador de posição de
arquivo no início do arquivo especificado
como seu argumento. Isto é, ele
“rebonina” o arquivo.
 Protótipo :

void rewind(FILE *fp);
Exemplo usando a função rewind()
#include <stdio.h>
#include <string.h>
int main() {
char str[80];
FILE *fp;
if((fp = fopen(“TEST”, “w+”)) == NULL) {
printf(“O arquivo não pode ser aberto.\n”);
return 0;
}
do {
printf(“Digite um string :\n”);
fgets(str, 80, stdin);
strcat(str, “\n”);
fputs(str, fp);
} while(*str != “\n”);
rewind(fp);
while(!feof(fp)){
fgets(str,79,fp);
printf(“%s”, str);
}
fclose(fp);
return 0;
}
Funções fprintf() e fscanf()
A função fprintf() permite escrever em
um arquivo da mesma forma que
escrevemos na tela com o printf();
 Seu protótipo é: int fprintf(FILE *fp, char
*formato,….);
 A função fscanf() lê informações de um
arquivo da mesma forma que lemos do
teclado com o scanf()
 Seu protótipo é: int fscanf(FILE *fp, char
*formato,….);

Exemplo:
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *arq;
char nome1[20], nome2[20], linha[20];
arq = fopen("teste.txt", "w");
printf("entre nome1: ");
scanf("%s", nome1);
printf("entre nome2: ");
scanf("%s", nome2);
fprintf(arq, "%s\n%s", nome1, nome2);
fclose(arq);
arq = fopen("teste.txt", "r");
printf("lendo do arquivo:\n");
fscanf(arq, "%s", nome1);
fscanf(arq, "%s", nome2);
printf("nome1: %s\nnome2: %s\n", nome1, nome2);
return 0;
}
Exercícios
Faça um programa que crie um arquivo
TEXTO em disco, com o nome “dados.txt”,
e escreva neste arquivo em disco uma
contagem que vá de 1 até 100, com um
número em cada linha. Abra este arquivo em
um editor de textos, como por exemplo o
Notepad ou o Wordpad do Windows.
 Faça um programa, um que leia o arquivo
TEXTO criado no exercício 1. Exibir na tela
os dados lidos dos respectivos arquivos.

Exercícios
Faça um programa que leia o nome e
sobrenome de 30 alunos e armazene em
um arquivo, de tal forma que o arquivo
tenha um aluno por linha.
 Faça um programa que leia um vetor de
inteiros A de tamanho 20 e guarde seus
valores em um arquivo, um por linha. Em
seguida, reabra o arquivo e leia os
elementos para o vetor B, verificando se
os valores foram gravados corretamente.

Exercícios

Faça um programa que leia (do teclado)
um cadastro de 10 alunos, indicando o
nome, nota1, nota2. Calcule a média
aritmética simples dos 10 alunos e depois
escreva em um arquivo texto os dados de
cada aluno: nome, nota1, nota2 e média.
Lembre-se de que as notas e média
deverão ser apresentadas como valores
que possuem até 2 casas após a vírgula.
Download

Arquivos