Aula 2.20 - Manipulando arquivos em C
Hoje aprenderemos sobre manipulação de arquivos, assim você conseguirá criar por exemplo arquivos txt, adicionar dados a ele e ler os dados.
Existe um comando específico para lidar com arquivos em C, este comando é o FILE, que é um tipo de variável do tipo arquivo, para podermos acessar esses arquivos precisamos criar um ponteiro que aponte para o tipo FILE, então vale a pena ter lido a aula 2.17 sobre ponteiros.
Existem dois tipos principais de arquivos, os binários e os texto. Os binários usam o sistema binário de numeração para armazenar informações numéricas ou literais, enquanto que os arquivos texto armazenam informações numéricas e literais através de códigos de seus caracteres.
Para você não ficar perdido, existe uma regrinha básica para manipulação de arquivo:
1- Declarar ponteiro
2- Abrir arquivo
3- Ler ou Escrever no arquivo
4- Fechar o arquivo
Confira a imagem abaixo:
Primeiro, na linha 5, declaramos um ponteiro (1) do tipo FILE. Depois abrimos um arquivo (2), para abrir um arquivo utilizamos a função fopen() que recebe dois argumentos: o nome do arquivo e o modo de abertura.
Em nome do arquivo você também pode especificar o local do arquivo exemplo: "C:\\local\\do\\arquivo.txt", caso não especifique o local, o compilador deduzirá que o arquivo está no mesmo local que o executável do seu prorgama, caso o arquivo especificado não exista ele criará este arquivo, portanto utilizaremos fopen para abrir e para criar arquivos se necessário.
O modo de abertura é a forma como você manipulará este arquivo, ele é especificado por uma letra, portanto confira o significado de alguns modo de abertura:
"r" abre arquivo em modo leitura, arquivo deve existir antes.
"w" abre arquivo em modo escrita, se arquivo existir ele será sobrescrito e se não existir ele será criado.
"a" abre arquivo em modo escrita, os dados serão adicionados ao final do arquivo se ele existir ou será criado
"rb" abre arquivo binário em modo leitura, mesma coisa do modo "r".
"wb" abre arquivo binário em modo escrita, mesma coisa do modo "w".
"ab" acrescenta binário ao fim do arquivo, mesma coisa do modo "a".
Na linha 9 foi criado uma condição que se o ponteiro fp retornar o valor NULL é porque não foi possível abrir o arquivo, portanto será imprimido uma mensagem ao usuário.
Na linha 13 e 14 foi recebido uma string digitada pelo usuário e armazenada na variável vetor texto para poder ser gravada no arquivo.
Para gravar a string no arquivo, foi utilizado o método de gravação caractere por caractere, como pode notar na linha 15 foi criado uma repetição que pega cada posição do vetor e joga dentro do arquivo utilizando a função fputc().
Na linha 18, a função fclose() recebe o ponteiro, ela serve para que a gravação seja efetuada e o arquivo fechado.
Se você rodar o programa da imagem acima, será criado um arquivo de nome texto2.txt com uma frase digitada por você. Agora como fazer para ler essa frase sem precisar de ir até o local do arquivo e abrir ele manualmente? Simples, criaremos um outro programa para ler este arquivo, confira abaixo como fica:
Como pode notar o modo de leitura mudou de "w" para "r" na linha 6. Na linha 11, a variável c recebe a primeira letra gravada no arquivo, depois na linha 12, dentro da repetição é imprimido o caractere que foi recebido e então entra em loop pegando os caracteres e imprimindo na tela até chegar no fim do arquivo, a função feof() retorna valor diferente de zero quando chega ao final do arquivo.
Por fim na linha 16 o arquivo é fechado.
Se você compreendeu como funciona manipulação de arquivos até aqui, você já aprendeu 90%, pois o resto é conhecimento das funções de manipulação de arquivo. Portanto confira abaixo algumas funções úteis:
fgets(char *str, int tamanho,FILE *fp); Lê uma string até que um caracter de nova linha seja lido ou tamanho-1 caracteres tenham sido lidos.
fputs (char *str,FILE *fp); Escreve uma string em um arquivo.
fprintf(FILE *fp,char *str,...); Funciona como a função printf(), mas a saída é um arquivo.
fscanf(FILE *fp,char *str,...); Funciona como a função scanf(), porém lê de um arquivo.
Para arquivos binários você pode utilizar as funções fread e fwrite. Confira um exemplo de sua utilização junto a um vetor de registros:
fwrite |
fread |
O primeiro parâmetro é o ponteiro do vetor cujos elementos queremos gravar no arquivo ou cujo elementos queremos mandar do que foi lido do arquivo (no caso, o vetor clientes), o segundo, é o tamanho de cada registro. O terceiro, é a quantidade de registros que queremos escrever ou ler. E o quarto é o ponteiro para o arquivo já aberto com fopen.
Bom na próxima aula teremos uns exercícios para vocês praticarem, até mais.
>> Próxima aula, clique aqui.
COMENTÁRIOS