Mudanças entre as edições de "SOP-arquivos"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
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);