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.
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.
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.
[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..
[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+!!!!
[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
[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!
[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.
[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.