Mudanças entre as edições de "SOP-arquivos"
Linha 5: | Linha 5: | ||
Para um programador, arquivos são repositórios permanentes de dados, os quais usualmente ficam em midia não volátil (disco rígido, CD ou DVD, pendrive, e outros). Arquivos servem para guardar informações que devem continuar a existir mesmo que termine o processo que as criou. Um exemplo é a agenda, cujo conteúdo deve ser preservado para futuras consultas e modificações. Mas além de serem depósitos de dados, arquivos possuem características bem definidas do ponto de vista de programação. | Para um programador, arquivos são repositórios permanentes de dados, os quais usualmente ficam em midia não volátil (disco rígido, CD ou DVD, pendrive, e outros). Arquivos servem para guardar informações que devem continuar a existir mesmo que termine o processo que as criou. Um exemplo é a agenda, cujo conteúdo deve ser preservado para futuras consultas e modificações. Mas além de serem depósitos de dados, arquivos possuem características bem definidas do ponto de vista de programação. | ||
− | Um arquivo é uma sequência de bytes, que pode ser acessada, lida e modificada por meio de funções específicas existentes na [http://pt.wikipedia.org/wiki/Biblioteca_padr%C3%A3o_do_C biblioteca padrão da linguagem C]. Essas funções servem para abrir e fechar um arquivo, ler e escrever uma certa quantidade de bytes, e mudar a posição da próxima leitura ou escrita. Abaixo segue um exemplo de um programa para escrever uma linha em um arquivo: | + | Um arquivo é uma sequência de bytes, que pode ser acessada, lida e modificada por meio de funções específicas existentes na [http://pt.wikipedia.org/wiki/Biblioteca_padr%C3%A3o_do_C biblioteca padrão da linguagem C]. Essas funções servem para abrir e fechar um arquivo, ler e escrever uma certa quantidade de bytes, e mudar a posição da próxima leitura ou escrita. |
+ | |||
+ | === Escrevendo em um arquivo === | ||
+ | |||
+ | Abaixo segue um exemplo de um programa para escrever uma linha em um arquivo: | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 52: | Linha 56: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Uma vez o arquivo estando aberto para escrita, pode-se escrever nele usando-se a função ''fprintf''. Essa função é idêntica à função ''printf'' que se usa para escrever na tela, | + | Uma vez o arquivo estando aberto para escrita, pode-se escrever nele usando-se a função ''fprintf''. Essa função é idêntica à função ''printf'' que se usa para escrever na tela. Porém ''fprintf'' precisa de um parâmetro adicional, deve ser a variável que corresponde ao arquivo aberto (primeiro parâmetro da função): |
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
fprintf(arquivo, "%s\n", linha); | fprintf(arquivo, "%s\n", linha); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | Finalmente, quando não se quer mais escrever no arquivo deve-se chamar a função ''fclose'' para fechá-lo: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | fclose(arquivo); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Lendo de um arquivo === | ||
+ | |||
+ | A leitura de um arquivo é parecida, com algumas pequenas modificações em sua abertura (deve-se indicar que o mode de operação será "r", de "read"), e usando-se a função ''fscanf'' para ler dados do arquivo. O exemplo abaixo mostra um programa para ler a primeira linha de um arquivo: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include<stdio.h> | ||
+ | |||
+ | int main() { | ||
+ | char linha[1024]; | ||
+ | char nome[256]; | ||
+ | FILE * arquivo; | ||
+ | |||
+ | printf("Digite o nome de um arquivo: "); | ||
+ | scanf("%s", nome); | ||
+ | |||
+ | printf("Vou mostrar a primeira linha do arquivo %s\n", nome); | ||
+ | |||
+ | arquivo = fopen(nome, "r"); | ||
+ | if (arquivo == NULL) { | ||
+ | perror("Ops ... erro ao acessar esse arquivo: "); | ||
+ | return 1; | ||
+ | } | ||
+ | |||
+ | fgets(linha, 1024, arquivo); | ||
+ | fclose(arquivo); | ||
+ | |||
+ | printf("Eis a primeira linha do arquivo: \n\n%s\n\n", linha); | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Como adiantado, na abertura com ''fopen'' deve-se usar o valor "r" para o modo: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | arquivo = fopen(nome, "r"); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Já a leitura de uma linha pode ser feita mais facilmente com a função ''fgets'': | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | fgets(linha, 1024, arquivo); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | A função ''char * fgets(char * resultado, int max_caracteres, FILE * arquivo)'' lê uma linha de um arquivo com até ''max_caracteres'' e a guarda na variável passada no parâmetro ''resultado''. No exemplo acima, ''fgets'' lê uma linha com até 1024 caracteres e a guarda na variável ''linha''. |
Edição das 19h50min de 15 de novembro de 2009
Arquivos na linguagem C
Arquivos do ponto de vista de programação
Para um programador, arquivos são repositórios permanentes de dados, os quais usualmente ficam em midia não volátil (disco rígido, CD ou DVD, pendrive, e outros). Arquivos servem para guardar informações que devem continuar a existir mesmo que termine o processo que as criou. Um exemplo é a agenda, cujo conteúdo deve ser preservado para futuras consultas e modificações. Mas além de serem depósitos de dados, arquivos possuem características bem definidas do ponto de vista de programação.
Um arquivo é uma sequência de bytes, que pode ser acessada, lida e modificada por meio de funções específicas existentes na biblioteca padrão da linguagem C. Essas funções servem para abrir e fechar um arquivo, ler e escrever uma certa quantidade de bytes, e mudar a posição da próxima leitura ou escrita.
Escrevendo em um arquivo
Abaixo segue um exemplo de um programa para escrever uma linha em um arquivo:
#include<stdio.h>
int main() {
char linha[256];
FILE * arquivo;
printf("Digite uma linha: ");
scanf("%[^\n]", linha);
printf("Vou gravar isto no arquivo teste.txt\n");
arquivo = fopen("teste.txt", "w");
if (arquivo == NULL) {
perror("Nao conseguiu abrir o arquivo");
return 1;
}
fprintf(arquivo, "%s\n", linha);
fclose(arquivo);
printf("Pronto ... veja o arquivo teste.txt !\n");
}
Esse pequeno programa evidencia que trabalhar com arquivos é muito parecido a trabalhar com escrita na tela e leitura do teclado. Mas primeiro deve-se focar nas linhas do programa que têm relação direta com arquivos. Para começar, um arquivo é referenciado por uma variável do tipo FILE *:
FILE * arquivo;
Em seguida, o arquivo a ser lido ou escrito deve ser aberto, usando-se a função FILE * fopen(char * nome_arquivo, char * modo):
arquivo = fopen("teste.txt", "w");
Como se pode ver, a função fopen precisa de dois parâmetros do tipo char * (quer dizer, dois parâmetros string). O primeiro é o caminho do arquivo a ser aberto, e o segundo é o modo de abertura (o que se pretende fazer com ele: ler, escrever, adicionar dados ao final, ler e escrever). No exemplo acima, vai-se abrir o arquivo teste.txt para escrita (modo "w", de write). O valor de retorno de fopen é do tipo FILE *, e corresponde a uma descrição do arquivo que foi aberto. Caso aconteça algum erro (ex: não há permissão para criar o arquivo), fopen retorna o valor NULL. O exemplo testa se isto acontece da seguinte forma:
if (arquivo == NULL) {
perror("Nao conseguiu abrir o arquivo");
return 1;
}
Uma vez o arquivo estando aberto para escrita, pode-se escrever nele usando-se a função fprintf. Essa função é idêntica à função printf que se usa para escrever na tela. Porém fprintf precisa de um parâmetro adicional, deve ser a variável que corresponde ao arquivo aberto (primeiro parâmetro da função):
fprintf(arquivo, "%s\n", linha);
Finalmente, quando não se quer mais escrever no arquivo deve-se chamar a função fclose para fechá-lo:
fclose(arquivo);
Lendo de um arquivo
A leitura de um arquivo é parecida, com algumas pequenas modificações em sua abertura (deve-se indicar que o mode de operação será "r", de "read"), e usando-se a função fscanf para ler dados do arquivo. O exemplo abaixo mostra um programa para ler a primeira linha de um arquivo:
#include<stdio.h>
int main() {
char linha[1024];
char nome[256];
FILE * arquivo;
printf("Digite o nome de um arquivo: ");
scanf("%s", nome);
printf("Vou mostrar a primeira linha do arquivo %s\n", nome);
arquivo = fopen(nome, "r");
if (arquivo == NULL) {
perror("Ops ... erro ao acessar esse arquivo: ");
return 1;
}
fgets(linha, 1024, arquivo);
fclose(arquivo);
printf("Eis a primeira linha do arquivo: \n\n%s\n\n", linha);
}
Como adiantado, na abertura com fopen deve-se usar o valor "r" para o modo:
arquivo = fopen(nome, "r");
Já a leitura de uma linha pode ser feita mais facilmente com a função fgets:
fgets(linha, 1024, arquivo);
A função char * fgets(char * resultado, int max_caracteres, FILE * arquivo) lê uma linha de um arquivo com até max_caracteres e a guarda na variável passada no parâmetro resultado. No exemplo acima, fgets lê uma linha com até 1024 caracteres e a guarda na variável linha.