Curso de C

Outros Comandos de Acesso a Arquivos


ferror

Protótipo:

                int ferror (FILE *fp);

A função ferror() se torna muito útil quando queremos verificar se cada acesso a um arquivo teve sucesso. Cada vez que uma função de arquivo é executada, a própria função registra numa variável especial se houve sucesso na operação ou não. Com ferror() podemos ter acesso ao conteúdo desta variável: ela retorna não zero se houve algum erro na última função de acesso ao arquivo.

rewind

A função rewind() de protótipo

                void rewind (FILE *fp);

retorna a posição corrente do arquivo para o início.

getw

getw() lê no arquivo um inteiro. Seu protótipo é:

                int getw (FILE *fp);

putw

putw() escreve um inteiro num arquivo. Protótipo:

                int putw (int i,FILE *fp);

fgets

Para se ler uma string num arquivo podemos usar fgets() cujo protótipo é:

                char *fgets (char *str,int tamanho,FILE *fp);

A string str lida deve ter seu tamanho determinado pelo programador.

fputs

Protótipo:

                char *fputs (char *str,FILE *fp);

Escreve uma string num arquivo.

fread

Podemos escrever e ler blocos de dados. Para tanto temos as funções fread() e fwrite(). O protótipo de fread() é:

                unsigned fread (void *buffer,int numero_de_bytes,int count,FILE *fp);

O buffer é a região de memória na qual serão armazenados os dados lidos. O número de bytes é o tamanho da unidade a ser lida. O contador indica quantas unidades devem ser lidas. Isto significa que o número total de bytes lidos é:

numero_de_bytes*count

A função retorna o número de unidades efetivamente lidas. Este número pode ser menor que o valor requisitado quando o fim do arquivo for encontrado.

fwrite

A função fwrite() funciona como a sua companheira fread(). Seu protótipo é:

                unsigned fwrite(void *buffer,int numero_de_bytes,int count,FILE *fp);

fseek

Para se fazer procuras e acessos randômicos usa-se a função fseek(). Esta move o cursor no arquivo de um valor especificado, a partir de um ponto especificado. Seu protótipo é:

                int fseek (FILE *fp,long numbytes,int origem);

O parâmetro de origem determina a partir de onde é que os bytes de movimentação serão contados. Os valores possíveis são definidos por macros no arquivo cabeçalho e são:
 

Nome

Valor

Significado

SEEK_SET

0

Início do arquivo

SEEK_CUR

1

Ponto corrente no arquivo

SEEK_END

2

Fim do arquivo

Tendo-se definido a partir de onde irá se contar numbytes determina quantos bytes de deslocamento será dado na posição atual.

remove

Protótipo:

                int remove (char *nome_do_arquivo);

Desmancha um arquivo especificado.

O exercício da página anterior poderia ser reescrito usando-se, por exemplo, fgets() e fputs(), ou fwrite() e fread(). A seguir apresentamos uma segunda versão que se usa das funções fgets() e fputs(), e que acrescenta algumas inovações.

#include <stdio.h
#include <stdlib.h
#include <string.h


void main()
{
FILE *p;
char str[30], frase[80] = "Este e um arquivo chamado: ", resposta[80];
int i;
/* Le um nome para o arquivo a ser aberto: */
printf("\n\n Entre com um nome para o arquivo:\n");
gets(str);

if (!(p = fopen(str,"w")))  /* Caso ocorra algum erro na abertura do arquivo..*/ 
  {                         /* o programa aborta automaticamente */
  printf("Erro! Impossivel abrir o arquivo!\n");
  exit(1);
  }
/* Se nao houve erro, imprime no arquivo, fecha ...*/
fputs(frase, p);
fputs(str,p);
         /* E se o seu disco estiver muito cheio.. */
if (ferror(p)) printf("\nNem tudo sao flores...\n");
fclose(p);

strcat(frase, str);
/* abre novamente para a leitura e fecha. */
p = fopen(str,"r");
fgets(resposta, strlen(frase)+1, p);
printf("\n\n%s\n", resposta);
fclose(p);
remove(str);
}


   

Dúvidas? De uma olhadinha em nossoFAQ

Perguntas para a lista do Curso de C