Mudanças entre as edições de "SOP-arquivos"
Linha 19: | Linha 19: | ||
printf("Vou gravar isto no arquivo teste.txt\n"); | printf("Vou gravar isto no arquivo teste.txt\n"); | ||
arquivo = fopen("teste.txt", "w"); | arquivo = fopen("teste.txt", "w"); | ||
+ | if (arquivo == NULL) { | ||
+ | perror("Nao conseguiu abrir o arquivo"); | ||
+ | return 1; | ||
+ | } | ||
fprintf(arquivo, "%s\n", linha); | fprintf(arquivo, "%s\n", linha); | ||
fclose(arquivo); | fclose(arquivo); | ||
Linha 25: | Linha 29: | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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 *'': | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | FILE * arquivo; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Em seguida, o arquivo a ser lido ou escrito deve ser aberto, usando-se a função ''FILE * fopen(char * nome_arquivo, char * modo)'': | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | arquivo = fopen("teste.txt", "w"); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | if (arquivo == NULL) { | ||
+ | perror("Nao conseguiu abrir o arquivo"); | ||
+ | return 1; | ||
+ | } | ||
+ | </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, com exceção do primeiro parâmetro que deve ser a variável que corresponde ao arquivo aberto: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | fprintf(arquivo, "%s\n", linha); | ||
</syntaxhighlight> | </syntaxhighlight> |
Edição das 19h40min 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. 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, com exceção do primeiro parâmetro que deve ser a variável que corresponde ao arquivo aberto:
fprintf(arquivo, "%s\n", linha);