Você está na página 1de 32

INTRODUÇÃO À COMPUTAÇÃO (IC)

UD VIII – Entrada e saída (arquivos)


SUMÁRIO

1. INTRODUÇÃO

1. FUNÇÕES DE MANIPULAÇÃO DE ARQUIVOS


a. Abertura
b. Fechamento
c. Leitura
d. Escrita
INTRODUÇÃO
INTRODUÇÃO

ARQUIVO

Conjunto de registros logicamente organizados,


armazenados em um dispositivo de memória secundária
(disco rígido, pen drive, etc.)
INTRODUÇÃO
FUNÇÕES DE
MANIPULAÇÃO DE
ARQUIVOS
FUNÇÕES

FUNÇÕES DE MANIPULAÇÃO DE ARQUIVOS

ABERTURA LEITURA ESCRITA FECHAMENTO

fopen getc putc fclose


fgets fputs
fread fwrite
fscanf fprintf
ABERTURA
ABERTURA | fopen

SINTAXE: FILE *fopen (char *nome_do_arquivo, char *modo);


MODO DE ABERTURA
r Abre um arquivo texto para leitura. O arquivo deve existir antes r+ Abre um arquivo texto para leitura e gravação. O arquivo deve
de ser aberto. existir e pode ser modificado.

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á
w Abrir um arquivo texto para gravação. Se o arquivo não existir, w+ criado.
ele será criado. Se já existir, o conteúdo anterior será destruído.
Abrir um arquivo texto para gravação. Os dados serão Abre um arquivo texto para gravação e leitura. Os dados
adicionados no fim do arquivo ("append"), se ele já existir; ou um serão adicionados no fim do arquivo se ele já existir, ou um
a novo arquivo será criado, no caso de arquivo não existente a+ novo arquivo será criado, no caso de arquivo não existente
anteriormente. anteriormente.

rb Abre um arquivo binário para leitura. Igual ao modo "r" anterior, r+b Abre um arquivo binário para leitura e escrita. O mesmo que
só que o arquivo é binário. "r+" acima, só que o arquivo é binário.

wb Cria um arquivo binário para escrita, como no modo "w" anterior, w+b Cria um arquivo binário para leitura e escrita. O mesmo que
só que o arquivo é binário. "w+" acima, só que o arquivo é binário.

ab Acrescenta dados binários no fim do arquivo, como no modo "a" a+b Acrescenta dados ou cria uma arquivo binário para leitura e
anterior, só que o arquivo é binário. escrita. O mesmo que "a+" acima, só que o arquivo é binário.
ABERTURA

EXEMPLO
• Abre um arquivo para leitura e/ou escrita. Exemplo:
//Ponteiro para um arquivo
FILE *arquivo;
//Abertura de um arquivo texto para leitura
arquivo = fopen("exemplo.txt", "r");
//Verificacao da abertura
if (arquivo == NULL)
printf("Erro na abertura do arquivo!");
FECHAMENTO
FECHAMENTO | fclose

SINTAXE: int fclose(FILE *arquivo);

● Fecha um arquivo após sua utilização. Exemplo:

FILE *arquivo;
arquivo = fopen("exemplo.txt", "r+");
if (arquivo == NULL) {
printf( "Erro na abertura do arquivo");
exit(0);
}
//Após a utilização do arquivo, fechá-lo
(...)
fclose(arquivo);
LEITURA
LEITURA

FUNÇÕES DE LEITURA DE ARQUIVOS

getc fgets fread fscanf

Leitura de
Leitura de um Leitura de Leitura
blocos de
caractere de uma string de formatada de
dados de
um arquivo um arquivo um arquivo
um arquivo
LEITURA | getc

SINTAXE: int getc(FILE *arquivo);


● Leitura de um caractere de um arquivo texto. Exemplo:

● FILE *arquivo; char c;


arquivo = fopen("exemplo.txt", "r"); if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Enquanto nao chegar ao final do arquivo,
// imprimir caractere lido. Constante EOF (End-of-File),
while((c = getc(arquivo)) != EOF) printf("%c", c);
LEITURA | fgets

SINTAXE: char *fgets(char *str, int tamanho, FILE *arquivo);

● Leitura de uma string de um arquivo texto. Exemplo:

FILE *arquivo;
arquivo = fopen("exemplo.txt", "r");
if (arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Enquanto nao chegar ao final do arquivo, ler linhas
char *resultado, linha[101];

while(!feof(arquivo)) {
//Leitura de até 100 caracteres por linha ou até o '\n'
resultado = fgets(linha, 101, arquivo);
if (resultado != NULL) printf("%s", linha);
}
LEITURA | fread

SINTAXE: size_t fread(void *buffer, int n_bytes, int count, FILE *arquivo);
● Leitura de um bloco de dados de um arquivo.
● Armazena em buffer os count blocos de n_bytes lidos do arquivo.
● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.dat", "rb");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Ler um float do arquivo
float f;
if(fread(&f, sizeof(float), 1, arquivo) != 1)
printf("Erro na leitura do arquivo!");
printf(“%f”, f);
LEITURA | fscanf

SINTAXE: int fscanf(FILE *arquivo, char *formato, [lista_variaveis]);


● Leitura formatada de um arquivo.
● Função scanf que lê de um arquivo e não do teclado.
● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.txt", "r");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Ler string (ate 100 caracteres) e float de um arquivo
char string[101]; float f;
fscanf(arquivo, “%s %f”, string, &f);
printf(“%s %f”, string, f);
ESCRITA
ESCRITA

FUNÇÕES DE ESCRITA EM ARQUIVOS

putc fputs fwrite fprintf

Escrita de Escrita de Escrita de Escrita


um caractere uma string blocos de formatada
em um em um dados em em um
arquivo arquivo um arquivo arquivo
ESCRITA | putc

SINTAXE: int putc(int ch, FILE *arquivo);


● Escrita de um caractere em um arquivo.
● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.txt", "w");
if(arquivo == NULL) {
printf( "Erro na abertura do arquivo");
exit(0);
}
//Escrever caracteres de uma string no arquivo
char string[] = “teste”;
for(int i = 0; i < strlen(string); i++)
putc(string[i], arquivo);
ESCRITA | fputs

SINTAXE: char *fputs(char *str, FILE *arquivo);

● Escrita de uma string em um arquivo.


● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.txt", "w");
if(arquivo == NULL) {
printf( "Erro na abertura do arquivo");
exit(0);
}
//Escrever uma string no arquivo
char string[] = “teste”;
fputs(string, arquivo);
ESCRITA | fwrite

SINTAXE: size_t fwrite(void *buffer, int n_bytes, int count, FILE *arquivo);

● Escrita de um bloco de dados em um arquivo.


● Salva os count blocos de n_bytes de buffer no arquivo.
● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.dat", "wb");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Escrever um float no arquivo
float pi = 3.1416;
if(fwrite(&pi, sizeof(float), 1, arquivo) != 1)
printf("Erro na escrita no arquivo!");
ESCRITA | fprintf

SINTAXE: int fprintf(FILE *arquivo, char *formato, [lista_variaveis]);

● Escrita formatada em um arquivo.


● Função printf que escreve em um arquivo e não na tela.
● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.txt", "w");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Escrever string e float em um arquivo
char string[] = “PI”;
float f = 3.1416;
fprintf(arquivo, “%s %f”, string, f);
POSICIONAMENTO
POSICIONAMENTO | fseek

SINTAXE: int fseek(FILE *arquivo, long int nr_bytes, int posicao);


● Por padrão, quando um arquivo é aberto, o cursor de leitura/gravação é
posicionado no começo ou no final, conforme o “modo” escolhido.
● A função fseek permite posicionar o cursor nr_bytes a partir da posicao
escolhida:
● SEEK_SET – o começo do arquivo;
● SEEK_CUR – a posição atual do curso; e
● SEEK_END – o final do arquivo.
POSICIONAMENTO | fseek

● EXEMPLO
FILE *arquivo;
arquivo = fopen("exemplo.txt", "w+");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
fputs("Isto eh um teste", arquivo);
//Posiciona o cursor logo após “Isto eh”
fseek(arquivo, 7, SEEK_SET);
fputs(" um experimento com arquivo texto.", arquivo);
fclose (arquivo);
ESCRITA E LEITURA
(Exemplo)
GRAVAÇÃO e LEITURA em arqivos binários | fwrite e fread

● Exemplo:
● O programa lê três valores tipo float, armazena em um vetor e grava os
valores em um arquivo. Depois faz a leitura do arquivo e exibe na tela.

#include <stdio.h>
#include <stdlib.h>

int main()
{
const int TAM = 3;
FILE *arquivo;
float gv[TAM], lv[TAM];

//Ler 3 valores tipo float e armazena no vetor gv


for (int i = 0; i<TAM; i++) {
printf(" Nr %d: ",i+1);
scanf("%f",&gv[i]);
}
LEITURA | fwrite

SINTAXE: size_t fwrite(void *buffer, int n_bytes, int count, FILE *arquivo);
● Escrita de um bloco de dados em um arquivo.
● Salva os count blocos de n_bytes de buffer no arquivo. Exemplo:
// continuação ...
// abre o arquivo para gravação
arquivo = fopen("dados.dat", "w+b");
if(arquivo == NULL) {
printf("Erro na abertura do arquivo!");
exit(0);
}
//Gravar tres valores tipo float no arquivo
if (fwrite(gv, sizeof(float), TAM, arquivo) != TAM)
printf("Erro na escrita no arquivo!");
fclose(arquivo);
LEITURA | fread

SINTAXE: size_t fread(void *buffer, int n_bytes, int count, FILE *arquivo);
● Leitura de um bloco de dados de um arquivo.
● Armazena em buffer os count blocos de n_bytes lidos do arquivo.

// Continuação: Abre arquivo para leitura


arquivo = fopen("dados.dat", "rb");
// Ler o arquivo e armazenar os valores no vetor lv
if (fread(lv, sizeof(float), TAM, arquivo) != TAM)
printf("Erro na leitura do arquivo!");
fclose(arquivo);

// Imprimir valores no vetor lv


for (int i=0; i<TAM; i++) printf("\n%.2f\n", lv[i]);
} // fim do main()
“ The purpose of computing is
insight, not numbers.”
Richard Hamming

Você também pode gostar