Arquivos em C
Geanderson Esteves
Mestrando em Ciências da Computação
Universidade Federal de Minas Gerais
Conceitos Básicos
Conjuntos de informações mantidas no disco (memória
secundária)
Informações são “persistidas” em comparação com a
memória RAM (memória primária)
Sistema Operacional (OS) faz um “buffer” das informações
lidas/gravadas
Analogia do conceito
Conceitos Básicos
Em C, arquivos podem ser gravados de duas maneiras:
● Modo texto (conjunto de caracteres)
○ Arquivo texto pode ser tratado por qualquer editor
(e.g., bloco de notas, terminal, word, etc.)
● Modo binário (conjunto de bytes)
○ Ex: Grandes quantidades de informações de forma
eficiente
Operações Primordiais
● Abertura do arquivo (localização, alocação do buffer);
● Leitura do arquivo (informações do buffer são
disponibilizadas);
● Gravação do arquivo (alteração de dados preexistentes
ou acréscimo de novos dados);
● Fechamento do arquivo (atualização do buffer e
liberação de memória alocada);
Comandos Essenciais
FILE *fp;
FILE *fopen(char *nome_arquivo,
char *modo_de_acesso);
int fclose(FILE *fluxo);
Possíveis modos de acesso
modo_de_acesso Significado
r Abre o arquivo somente para leitura. O arquivo deve existir.
r+ Abre o arquivo para leitura e escrita. O arquivo deve existir.
w Abre o arquivo somente para escrita no início do arquivo. Apagará o conteúdo do
arquivo se ele já existir, criará um arquivo novo se ele não existir.
w+ Abre o arquivo para escrita e leitura, apagando o conteúdo pré-existente.
a Abre o arquivo para escrita no final do arquivo. Não apagará o conteúdo
pré-existente.
a+ Abre o arquivo para escrita no final do arquivo e leitura.
Ex1. Testando criação de um arquivo
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen ("README", "w");
if (fp == NULL) {
printf ("Houve um erro ao abrir o arquivo.n");
return 1;
}
printf ("Arquivo README criado com sucesso.n");
fclose (fp);
return 0;
}
Ex2. Lendo um arquivo
#include <stdio.h>
int main()
{
char c[41];
FILE *fp;
fp = fopen("README", "r");
while(fgets(c, 40, fp) != NULL)
puts(c);
fclose(fp);
return 0;
}
Ex3. Contando linhas de um arquivo
#include <stdio.h>
int main()
{
int c, nlinhas = 0;
FILE *fp;
fp = fopen("README", "r");
while((c=fgetc(fp))!=EOF)
if(c=='n') nlinhas++;
fclose(fp);
printf("Numero de linhas = %dn", nlinhas);
return 0;
}
Escrevendo em um arquivo
void fputc(int caractere, FILE *fluxo)
void fputs(char *string, FILE *fluxo)
void fprintf(FILE *fluxo, char *formatação)
int fwrite(void *dados, int tamanho_do_elemento,
int num_elementos, FILE *fluxo)
Escrevendo em um arquivo
Saída padrão Arquivos Explicação
putchar fputc Imprime apenas um caractere
puts fputs Imprime uma string diretamente, sem nenhuma formatação
printf fprintf Imprime uma string formatada
N/A fwrite Grava dados binários em um arquivo
Ex4. Escrevendo em um arquivo [1]
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen ("README", "w");
fprintf(fp, "Salvando alguma coisa no meu arquivo...n");
fclose(fp);
return 0;
}
Ex4. Escrevendo em um arquivo [2]
#include <stdio.h>
int main()
{
FILE *fp;
char frase[] = "Universidade Federal de Minas Gerais";
fp = fopen("file", "w");
for(int i = 0; frase[i]!='0'; i++)
fprintf(fp, "%c", frase[i]);
return 0;
}
Arquivos binários
Servem para salvar (recuperar) as informações tais como se
encontram na memória principal
Permite o manuseio de grandes quantidades de dados de
forma mais eficiente (i.e., não sequencial)
Um arquivo binário permite a busca por qualquer informação
contida no arquivo (fseek)
Arquivos binários
int fread(void* p, int tam, int num,
FILE *fp);
int fwrite(void* p, int tam, int
num, FILE *fp);
int fseek(FILE *fp, long offset, int
origem)
Ex5. Escrevendo um arquivo binário
#include <stdio.h>
int main()
{
FILE *fp;
fp=fopen("test.bin", "wb");
int x[5]= {1, 2, 3, 4, 5};
fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);
return 0;
}
Referências
● ZIVIANI, Nivio. Projeto de Algoritmos com
Implementação em Pascal e C
● C Programming.
http://www.cprogramming.com/tutorial/c-tutorial.html
● Tutorials Point.
https://www.tutorialspoint.com/c_standard_library

Arquivos em C

  • 1.
    Arquivos em C GeandersonEsteves Mestrando em Ciências da Computação Universidade Federal de Minas Gerais
  • 2.
    Conceitos Básicos Conjuntos deinformações mantidas no disco (memória secundária) Informações são “persistidas” em comparação com a memória RAM (memória primária) Sistema Operacional (OS) faz um “buffer” das informações lidas/gravadas
  • 3.
  • 4.
    Conceitos Básicos Em C,arquivos podem ser gravados de duas maneiras: ● Modo texto (conjunto de caracteres) ○ Arquivo texto pode ser tratado por qualquer editor (e.g., bloco de notas, terminal, word, etc.) ● Modo binário (conjunto de bytes) ○ Ex: Grandes quantidades de informações de forma eficiente
  • 5.
    Operações Primordiais ● Aberturado arquivo (localização, alocação do buffer); ● Leitura do arquivo (informações do buffer são disponibilizadas); ● Gravação do arquivo (alteração de dados preexistentes ou acréscimo de novos dados); ● Fechamento do arquivo (atualização do buffer e liberação de memória alocada);
  • 6.
    Comandos Essenciais FILE *fp; FILE*fopen(char *nome_arquivo, char *modo_de_acesso); int fclose(FILE *fluxo);
  • 7.
    Possíveis modos deacesso modo_de_acesso Significado r Abre o arquivo somente para leitura. O arquivo deve existir. r+ Abre o arquivo para leitura e escrita. O arquivo deve existir. w Abre o arquivo somente para escrita no início do arquivo. Apagará o conteúdo do arquivo se ele já existir, criará um arquivo novo se ele não existir. w+ Abre o arquivo para escrita e leitura, apagando o conteúdo pré-existente. a Abre o arquivo para escrita no final do arquivo. Não apagará o conteúdo pré-existente. a+ Abre o arquivo para escrita no final do arquivo e leitura.
  • 8.
    Ex1. Testando criaçãode um arquivo #include <stdio.h> int main() { FILE *fp; fp = fopen ("README", "w"); if (fp == NULL) { printf ("Houve um erro ao abrir o arquivo.n"); return 1; } printf ("Arquivo README criado com sucesso.n"); fclose (fp); return 0; }
  • 9.
    Ex2. Lendo umarquivo #include <stdio.h> int main() { char c[41]; FILE *fp; fp = fopen("README", "r"); while(fgets(c, 40, fp) != NULL) puts(c); fclose(fp); return 0; }
  • 10.
    Ex3. Contando linhasde um arquivo #include <stdio.h> int main() { int c, nlinhas = 0; FILE *fp; fp = fopen("README", "r"); while((c=fgetc(fp))!=EOF) if(c=='n') nlinhas++; fclose(fp); printf("Numero de linhas = %dn", nlinhas); return 0; }
  • 11.
    Escrevendo em umarquivo void fputc(int caractere, FILE *fluxo) void fputs(char *string, FILE *fluxo) void fprintf(FILE *fluxo, char *formatação) int fwrite(void *dados, int tamanho_do_elemento, int num_elementos, FILE *fluxo)
  • 12.
    Escrevendo em umarquivo Saída padrão Arquivos Explicação putchar fputc Imprime apenas um caractere puts fputs Imprime uma string diretamente, sem nenhuma formatação printf fprintf Imprime uma string formatada N/A fwrite Grava dados binários em um arquivo
  • 13.
    Ex4. Escrevendo emum arquivo [1] #include <stdio.h> int main() { FILE *fp; fp = fopen ("README", "w"); fprintf(fp, "Salvando alguma coisa no meu arquivo...n"); fclose(fp); return 0; }
  • 14.
    Ex4. Escrevendo emum arquivo [2] #include <stdio.h> int main() { FILE *fp; char frase[] = "Universidade Federal de Minas Gerais"; fp = fopen("file", "w"); for(int i = 0; frase[i]!='0'; i++) fprintf(fp, "%c", frase[i]); return 0; }
  • 15.
    Arquivos binários Servem parasalvar (recuperar) as informações tais como se encontram na memória principal Permite o manuseio de grandes quantidades de dados de forma mais eficiente (i.e., não sequencial) Um arquivo binário permite a busca por qualquer informação contida no arquivo (fseek)
  • 16.
    Arquivos binários int fread(void*p, int tam, int num, FILE *fp); int fwrite(void* p, int tam, int num, FILE *fp); int fseek(FILE *fp, long offset, int origem)
  • 17.
    Ex5. Escrevendo umarquivo binário #include <stdio.h> int main() { FILE *fp; fp=fopen("test.bin", "wb"); int x[5]= {1, 2, 3, 4, 5}; fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp); return 0; }
  • 18.
    Referências ● ZIVIANI, Nivio.Projeto de Algoritmos com Implementação em Pascal e C ● C Programming. http://www.cprogramming.com/tutorial/c-tutorial.html ● Tutorials Point. https://www.tutorialspoint.com/c_standard_library