2. Introdução
Programas que leem dados do teclado e
escrevem na tela do monitor são comuns, mas há
a necessidade de ler dados de um arquivo que
está no disco (HD) e de como gravar um arquivo
no disco.
3. Motivação
• Entrada (de um programa):
Banco de dados
• Saída: Lista dos funcionários que trabalham na empresa há
mais de 5 anos.
Desenvolvê-lo de modo a termos entrada e saída através de
arquivos.
Arquivo = pode ser visto como um espaço sequencial onde são
lidos ou gravados dados.
4. Tipos de Arquivo
-Arquivos de acesso sequencial (Texto):
•Arquivos nos quais são gravados e/ou lidos caracteres.
•Podem ser abertos em um editor de textos.
-Arquivos de acesso aleatório( Binário)
•Arquivos nos quais são gravados e/ou lidos dados( por
exemplo, int, float, char, double,struct,etc.).
•Podem ser lidos a partir de qualquer posição, sem a
necessidade de ler todos os dados anteriores.
•Não podemos acessar seu conteúdo através de um
editor de texto.
7. Manipulação
Função fopen
r
Abre um arquivo texto para leitura. O arquivo deve existir antes
de ser aberto.
w
Abrir um arquivo texto para gravação. Se o arquivo não existir,
ele será criado. Se já existir, o conteúdo anterior será destruído.
a
Abrir um arquivo texto para gravação. Os dados serão
adicionados no fim do arquivo ("append"), se ele já existir, ou um
novo arquivo será
criado, no caso de arquivo não existente anteriormente.
rb
Abre um arquivo binário para leitura. . O arquivo deve existir
antes de ser aberto.
wb
Cria um arquivo binário para escrita. Se já existir, o conteúdo
anterior será destruído
ab
Acrescenta dados binários no fim do arquivo, como no modo "a"
anterior, só que o arquivo é binário.
8. Manipulação
Função fopen
r+
Abre um arquivo texto para leitura e gravação. O arquivo deve
existir e pode ser modificado.
w+
Cria um arquivo texto para leitura e gravação. Se o arquivo
existir, o conteúdo anterior será destruído. Se não existir, será
criado.
a+
Abre um arquivo texto para gravação e leitura. Os dados serão
adicionados no fim do arquivo se ele já existir, ou um novo
arquivo será
criado, no caso de arquivo não existente anteriormente.
r+b
Abre um arquivo binário para leitura e escrita. O mesmo que "r+"
acima, só que o arquivo é binário.
w+b
Cria um arquivo binário para leitura e escrita. O mesmo que "w+"
acima, só que o arquivo é binário.
a+b
Acrescenta dados ou cria uma arquivo binário para leitura e
escrita. O mesmo que "a+" acima, só que o arquivo é binário.
9. Manipulação
-
Escrita e leitura em arquivos texto
fputc(int c, FILE *f)
Escreve um caractere c em um arquivo
apontado por f. Devolve o caractere caso a
operação seja bem sucedida ou a constante
EOF caso contrário.
fgetc(FILE *f)
Lê um caractere a partir de um arquivo apontado por
f e devolve um inteiro com o valor deste caractere.
fscanf e fprintf
Funcionam exatamente como as funções scanf() e
printf() comuns, com a diferente de que essas
recebem um parâmetro a mais que é um ponteiro
para o arquivo a ser lido/escrito.
fgets(char *str, int tam,
FILE *f)
Lê uma string com no máximo tam caracteres de um
arquivo f e armazena em str
fputs(char *str, FILE *f)
Escreve uma string str em um arquivo f.
10. Manipulação
-Escrita e leitura em arquivos binários
fseek(FILE *f, long
tam, int origem)
Posiciona o ponteiro dentro de um arquivo
binário f tam posições após origem. O
parâmetro origem pode ter os seguintes valores:
SEEK_SET
SEEK_CUR
SEEK_END
início do arquivo
posição atual
final do arquivo
fread(void *buffer,
Lê n registros de tamanho b de um arquivo f e
size_t b, size_t n, FILE armazena em buffer e devolve o número de
*f)
elementos lidos.
Fwrite (void *buffer,
Escreve n registros de tamanho b armazenados
size_t b, size_t n, FILE em buffer em um arquivo f.
*f)
rewind(FILE *f)
Redireciona o ponteiro de posição do arquivo f
de volta para o início.
11. Manipulação
- Fechamento (função fclose)
•
•
Utilizada para fechar um arquivo aberto por fopen().
Retorna zero quando o fechamento se dá com sucesso.
Protótipo:
int fclose(FILE* pf)
Exemplo
12. Manipulação
- Outras funções para manipulação de arquivos
ferror(FILE *f)
Retorna um inteiro indicando se houve um erro na última
operação feita em um arquivo.
remove(char nome)
Apaga um arquivo com o nome nome do disco. Retorna
zero caso seja bem sucedida e um número diferente caso
contrário.
feof(FILE *f)
Indica quando o final de um arquivo binário f foi atingido.
Retorna um número diferente de zero caso tenha atingido
e zero caso contrário.
fflush(FILE *f)
Esvazia o conteúdo de uma stream de saída e escreve
qualquer conteúdo existente em f. Devolve zero caso
tenha obtido sucesso, caso contrário devolve EOF.