Pular para o conteúdo

Manipulando arquivos em C (parte 1)

Esta é a primeira das duas partes que compõem um tutorial que trata a manipulação de arquivos em C. Aqui veremos o funcionamento de funções como: fopen, fclose, feof, fgetc e fputc.
Kleber de Andrade Reis kandrade
Hits: 227.737 Categoria: C/C++ Subcategoria: Manipulação de Arquivos
  • Indicar
  • Impressora
  • Denunciar

Introdução

Existem muitas funções para a manipulação de arquivos em C. Dividi esse artigo em duas partes para tentar passar com detalhes e exemplificar o uso dessas funções.

Então vamos à elas!

Abrindo e fechando um arquivo


O sistema de entrada e saída do ANSI C é composto por uma série de funções cujos protótipos estão reunidos em stdio.h. Todas estas funções trabalham com o conceito de "ponteiro de arquivo". Este não é um tipo propriamente dito, mas uma definição usando o comando typedef. Esta definição também está no arquivo stdio.h. Podemos declarar um ponteiro de arquivo da seguinte maneira:

FILE *p;

"p" será então um ponteiro para um arquivo. É usando este tipo de ponteiro que vamos poder manipular arquivos no C.

Abrindo um arquivo:

fopen

Protótipo: FILE *fopen (char *nome_do_arquivo,char *modo);
  • O primeiro parâmetro "nome_do_arquivo": é o local onde o arquivo se encontra ou se for criado, onde o arquivo deve ser armazenado.
  • O segundo parâmetro "*modo": especifica como o arquivo deve ser aberto. Abaixo uma tabela mostrando os modos possíveis:

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.
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.


Fechando um arquivo:

fclose

Protótipo: int fclose (FILE *fp);
  • O ponteiro fp passado à função fclose() determina o arquivo a ser fechado. A função retorna zero no caso de sucesso.

   1. Introdução
   2. Exemplo: Abrindo e fechando um arquivo
   3. Lendo e escrevendo caracteres em arquivo
   4. Exemplo: Lendo e escrevendo caracteres em arquivo
   5. Conclusão

Manipulando arquivos em C (parte 2)

DoTheWorld - Biblioteca completa para manipulação de Arquivos e Pastas em C

Manipulação de arquivos em C++

Manipulação de imagens no formato PPM

Manipulando arquivos em C (parte 2)

Acessando PostgreSQL com C - Cursores

#1 Comentário enviado por Dr.Tr3z3 em 20/02/2005 - 04:41h
Párabens ,é um ótimo artigo.
#2 Comentário enviado por libius em 21/02/2005 - 10:31h
Parabéns Kleber, o artigo está muito bem escrito.

Um abraço!
#3 Comentário enviado por ice em 21/02/2005 - 16:40h
Excelente artigo, muito bom!
#4 Comentário enviado por removido em 21/02/2005 - 23:33h
ou... pirado velho o a manipulação... muito show... depois vamos combinar umas aulinhas pra vc naum se estressar com a ausencia dos amigos... ahuahuahu..
#5 Comentário enviado por Thiago Madella em 02/03/2005 - 22:10h
Blza velho gostei muito....
#6 Comentário enviado por evanderson em 10/03/2005 - 11:36h
Gostei muito do seu artigo, está muito bem explicado. Vamos aguardar a segunda parte dele...

Abraços.
#7 Comentário enviado por g@bi em 10/03/2005 - 19:52h
Pô! Ficou legal pra caramba! Parabéns!...
#8 Comentário enviado por pulley em 11/03/2005 - 22:05h
pooo!!!! kleber ficou muito irado carinha esse artigo é o bicho tá bem explicado vou te contratar para comentar uma biblia de c/c++ em português e explicar tudo, combinado. valeuuuuuu T+!!!!
#9 Comentário enviado por eraldo_c em 17/03/2005 - 11:07h
valeu cara! ficou bacana e veio a calhar bem na hora, espero fazer um programinha de manipulação de artigo com seu artigo..............valeu!
#10 Comentário enviado por eraldo_c em 17/03/2005 - 11:08h
corrigindo meu comentario anterior mainipulaçao de "arquivo"..........valeu!
#11 Comentário enviado por gelepoker em 30/03/2005 - 20:35h
Muito ferra o artigo, espero q vc possa esta coperando com seus artigos.

valeu
#12 Comentário enviado por m4sk4r4 em 02/12/2005 - 04:18h
Artigo muito bom, e bem elaborado.

Parabéns!!!

[]'s
Gabriel Santana
#13 Comentário enviado por quak2team em 26/12/2005 - 18:24h
Issae ta fera o tuto ai... muito bom..

Parabéns ai... flws...abraços quak2team
#14 Comentário enviado por ornel em 29/06/2006 - 00:36h
artigo muito bom. Só achei muitíssimo semelhante à apostila da UFMG, disponível em http://ead1.eee.ufmg.br/cursos/C/ que, diga-se de passagem, não foi citada em nenhuma momento em seu artigo. Mas tá valendo o esforço,né?
falow
#16 Comentário enviado por daubtful em 11/08/2006 - 21:45h
cara boa msm essa introdução
#17 Comentário enviado por alexandrepom em 02/12/2006 - 16:57h
Esse artigo é a minha salvação! to iniciando em programação e tenho que aprender a manipular arquivos p/ apresentar um progeto de curso! vlw man! muito bom o artigo!
#18 Comentário enviado por f_Candido em 13/10/2007 - 23:43h
Show de Bola, um início bem interesaante.
Parabéns.
#19 Comentário enviado por flavyanne em 06/03/2008 - 11:27h
Muito bom o artigo, tirei algumas dúvidas.
Parabéns!
#20 Comentário enviado por paulocesar.bras em 21/11/2009 - 22:49h
Muito bom artigo gostei muito eu postei uma duvida parecida depois vc poderia contribuir comigo lá
#21 Comentário enviado por tatovieira em 19/01/2010 - 09:38h
Como substituir um caracter? Por ex: Na primeira linha no primeiro byte, se encontrar a letra "a" substituir pela letra "b".
Muito obrigado e parabéns pelo artigo.
#22 Comentário enviado por kandrade em 19/01/2010 - 10:30h
Muito obrigado pelos comentários!
Fiquei surpreso com a quantidade deles.

tatovieira quanto a sua dúvida recomendo que leia a segunda parte desse tutorial.
A idéia básica é "procurar" pela linha ou estrutura que deseja substituir com "fseek" ou outra função que conta as linhas e substituir os dados reescrevendo a parte modificada.

Qualquer coisa estamos ai!

Abraço!
#23 Comentário enviado por r.moraes.32 em 09/11/2011 - 12:15h
pergunta... alguem sabe me dizer como escrever algo no arquivo e isso ficar em negrito?
arquivo .doc mais especificamente...

obrigado
#24 Comentário enviado por marcos@marcos em 23/08/2012 - 13:53h
Parabéns pela iniciativa!
Muito bom o artigo.
#25 Comentário enviado por seniDEac em 05/10/2016 - 20:37h
Muito bom o artigo, já me ajudou muito!!
Obrigado !

Mas isso acabou me dando mais duvidas! rsrs, Espero que possa me ajudar!
Você poderia escrever algo sobre como "trabalhar" com arquivos ".CONF" ? em linux?? Estou estudando C e não sei bem por onde começar!

Qual eh a melhor técnica pra ler e gravar arquivos de configuração para usar em programas escritos em C?
#26 Comentário enviado por Diogo36Luiz em 01/07/2017 - 13:51h
Fiz uma pequena modificação onde está escrito "/mnt/wind/teste/facu/teste.txt" para "teste.txt". O código funcionou no Ubuntu 16.04 LTS. Muito obrigado.

Contribuir com comentário

Entre na sua conta para comentar.