Você está na página 1de 14

Universidade Federal do Espírito Santo

Programação II
Arquivos
Professora: Norminda Luiza
MATERIAL DO PROF. REGIS PIRES MAGALHÃES - CEFETPI
Arquivos

Armazenam grande quantidade de informação


Dados são gravados em disco
Tipos de arquivos

Arquivo Texto
 Armazena caracteres que podem ser
mostrados diretamente na tela ou modificados
por um editor de textos simples.
 Conhecido por arquivo sequencial
 Tipo especial de arquivo que pode ser
editado normalmente através de um editor de
textos qualquer
 É dito sequencial porque a leitura tem que
ser feita sequencialmente do início ao fim do
arquivo
Tipos de arquivos
Arquivo Binário
 Sequencia de bits sugeita as convenções do
arquivo que o gerou
 Conhecido por arquivo randômico ou de acesso
aleatório
 É possível buscar uma determinada informação
em qualquer posição, sem a necessidade de
percorrer todo o arquivo até alcançar a informação
desejada.
 O acesso a informação é direto

 Exemplos: arquivos executáveis, arquivos


compactados, arquivos de registros
Manipulação de arquivos
Passos
 Criar um ponteiro para a estrutura FILE (definida
em stdio.h)
 Abrir o arquivo
 Ler ou gravar dados no arquivo
 Fechar o arquivo
Escrita de arquivo texto
# include <stdio.h>

int main() {
FILE *arq;
arq = fopen("teste1.txt", "w");
fprintf(arq, "Olá mundo! \n");
fclose(arq);
system("pause");
return 0;
}
Leitura de arquivo texto
# include <stdio.h>

int main() {
FILE *arq;
char c;

arq = fopen("teste1.txt", "r");


c = getc(arq);
while (c != EOF){
printf("%c", c);
c = getc(arq);
}
fclose(arq);
system("pause");
return 0;
}
Somatório dos números de um arquivo
# include <stdio.h>

int main() {
FILE *arq;
int num, soma = 0;

arq = fopen("numeros.txt", "r");

while (fscanf(arq,"%d",&num) != EOF){


soma += num;
}
printf("Soma = %d\n", soma);

fclose(arq);
system("pause");
return 0;
}
Funções
 fopen(“nome”, “modo”)
• abre um arquivo e retorna um ponteiro para ele
• caso não consiga abrir um arquivo retorna NULL

 fprintf(arq, “formato”, arg1,…)


• escreve para um arquivo

 fclose(arq)
• Fecha um arquivo

 getc(arq)
• Obtém um caracter

 fscanf(arq, “formato”, arg1,…)


• Lê de um arquivo

 fwrite(*ptr, tamanho_do_bloco, n, arq)


• Escreve n blocos de *ptr para um arquivo
Funções
 fread (*ptr, tamanho_do_bloco, n, arq)

 fseek(arq, posição, modo)


• Altera a posição no arquivo
• Deslocamento relativo ao:
• SEEK_SET – início do arquivo
• SEEK_CUR – ponto inicial
• SEEK_END – final do arquivo

 fflush(arq)
• Realiza a gravação efetiva no arquivo

 ftell(arq)
• Indica a posição corrente no arquivo
Modos de operação

Modo Significado
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. Igual ao modo "r" anterior, só
que o arquivo é binário.
wb Cria um arquivo binário para escrita, como no modo "w" anterior, só
que o arquivo é binário.
ab Acrescenta dados binários no fim do arquivo, como no modo "a"
anterior, só que o arquivo é binário.
Modos de operação

Modo Significado
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
Salvando uma estrutura
# include <stdio.h>
# include <string.h>

struct pessoa{
char nome[50];
int idade;
};

typedef struct pessoa Tpessoa;

int main() {
FILE *arq;
Tpessoa p;

arq = fopen("pessoas.txt", "ab");


printf("Digite um nome: ");
gets(p.nome);
// scanf("%50[^\n]%*c",&p.nome);
scanf("%d",&p.idade);

fwrite(&p, sizeof(Tpessoa), 1, arq);


fclose(arq);
system("pause");
return 0;
}
Lendo todo o arquivo
# include <stdio.h>
# include <string.h>

struct pessoa{
char nome[50];
int idade;
};
typedef struct pessoa Tpessoa;

int main() {
FILE *arq;
Tpessoa p;

arq = fopen("pessoas.txt", "rb");

while (fread(&p,sizeof(Tpessoa),1,arq) !=0){


printf("Nome: %s - Idade: %d\n",p.nome,p.idade);
}

fclose(arq);
system("pause");
return 0;
}

Você também pode gostar