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.

[ Hits: 225.675 ]

Por: Kleber de Andrade Reis em 20/02/2005


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.

    Próxima página

Páginas do artigo
   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
Outros artigos deste autor

Manipulando arquivos em C (parte 2)

Leitura recomendada

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

Manipulando arquivos em C (parte 2)

Manipulação de arquivos em C++

Manipulação de imagens no formato PPM

Cuidado com números em Ponto Flutuante

  
Comentários
[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

[15] Comentário enviado por kandrade em 29/06/2006 - 08:16h

ornel, utilizei sim a apostila da UFMG como base, mas não só ela....
voce pode verificar isso aqui, se for de seu interesse:

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2216&pagina=4

[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts